linux守护进程怎么创建

60次阅读
没有评论

共计 2152 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章主要讲解了“linux 守护进程怎么创建”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“linux 守护进程怎么创建”吧!

在 linux 中,守护进程也称“精灵进程”,是一个在后台运行且不受任何终端控制的特殊进程,用于执行特定的系统任务。守护进程独立于控制终端并且周期性的执行某种发生的事件。

本教程操作环境:linux5.9.8 系统、Dell G3 电脑。

守护进程的定义

守护进程也称为精灵进程(Daemon),是一个在后台运行且不受任何终端控制的特殊进程,用于执行特定的系统任务。很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束。

它独立于控制终端并且周期性的执行某种发生的事件。守护进程是一种很有用的进程。Linux 的大多数服务器就是用守护进程实现的。

Linux 系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互。其他进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程 (守护进程) 不受用户登录注销的影响,它们一直在运行着。这种进程有一个名称叫守护进程(Daemon)。

下面们用 ps axj 命令查看系统中的进程。参数 a 表示不仅列出当前用户的进程,也列出所有其他用户的进程;参数 x 表示不仅列出有控制终端的进程,也列出所有无控制终端的进程;参数 j 表示列出与作业控制相关的信息。

(1)凡是 TPGID 一栏写着 - 1 的都是没有控制终端的进程,也就是守护进程;

(2)在 COMMAND 一列用 [] 括起来的名字表示内核线程,这些线程在内核里创建,没有用户空间代码,因此没有程序文件名和命令行,通常采用以 k 开头的名字,表示 Kernel;

(3)init 进程我们已经很熟悉了,udevd 负责维护 /dev 目录下的设备文件,acpid 负责电源管理,syslogd 负责维护 /var/log 下的日志文件;

(4)可以看出,守护进程通常采用以 d 结尾的名字,表示 Daemon。

守护进程的特点

(1)在 Linux 中,每个系统与用户进行交流的界面成为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端;

(2)当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,(脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断),它从被执行的时候开始运转,直到整个系统关闭才退出(当然可以认为是杀死相应的守护进程);

(3)如果想让某个进程不因为用户或中断或其他变化而影响,那么就必须把这个进程变成一个守护进程。

进程,进程组,会话,控制终端之间的关系

因为守护进程的创建需要改变这些环境参数,所以了解它们之间的关系很重要:

进程组:它是由一个或多个进程组成,进程组号 (GID) 就是这些进程中的进程组长的 PID。

会话:其实叫做会话期 (session),它包括了期间所有的进程组,一般一个会话期开始于用户 login,一般 login 的是 shell 终端,所以 shell 终端又是此次会话期的首进程,会话一般结束于 logout。对于非进程组长,它可以调用 setsid() 创建一个新的会话。

控制终端(tty):一般就是指 shell 终端,它在会话期中可有也可以没有。

创建守护进程

创建守护进程最关键的一步是调用 setsid 函数创建一个新的 Session Leader。

#includepid_t setid(void);// 该函数调用成功时返回新创建的 Session 的 id(其实也就是当前进程的 id), 出错返回 -1。

注意,调用这个函数之前,当前进程不允许是进程组的 Leader,否则该函数返回 -1。要保证当前进程不是进程组的 Leader 也很容易,只要先 fork 再调用 setsid 就行了。fork 创建的子进程和父进程在同一个进程组中,进程组的 Leader 必然是该组的第一个进程,所以子进程不可能是该组的第一个进程,在子进程中调用 setsid 就不会有问题了。

成功调用该函数的结果是:

(1)创建一个新的 Session,当前进程为 Session Leader,当前进程的 id 就是 Session 的 id;

(2)创建一个新的进程组,当前进程为进程组的 Leader,当前进程的 id 就是进程组的 id;

(3)如果当前进程原本有一个控制终端,则它失去这个终端,成为一个没有控制终端的进程。(所谓失去控制终端指的是,原来的控制终端仍然是打开的,仍然可以读写,但只是一个普通的打开文件,而不是控制终端了)。

如何杀死守护进程

1. 首先 ps axj | grep 守护进程名字,找到相应的守护进程,然后使用 kill -9 守护进程名杀掉;

2. 利用 ps -ef 命令查找相应的守护进程,再用 kill - 9 命令将其杀死;

3. 创建 shell 脚本对进程的启动、关闭、重启进行自动管理。

感谢各位的阅读,以上就是“linux 守护进程怎么创建”的内容了,经过本文的学习后,相信大家对 linux 守护进程怎么创建这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计2152字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)