1.什么是守护进程?
守护进程也叫精灵进程,是在后台运行的一种特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件;
在 linux系统启动时会有很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互,除守护进程外其他进程都是在用户登录或运行程序时创建,在系统注销时终止,但系统服务程序不受用户登录注销的影响(原因:它跟终端没有关系),我们把这种进程叫做守护进程。
一个守护进程的父进程是init进程,因为它真正的父进程在fork出子进程后就先于子进程exit退出了,所以它是一个由init继承的孤儿进程。守护进程是非交互式程序,没有控制终端,所以任何输出,无论是向标准输出设备stdout还是标准出错设备stderr的输出都需要特殊处理。
2.为什么要有守护进程??
控制终端因为某些原因会发送一些信号,接受到信号的进程去执行这些信号的默认处理动作会导致进程退出。这就使得进程不能正常的处理某些任务,所以就需要像守护进程这样接受不到信号的进程。让进程独立与控制终端,执行某些任务或处理某些事件。
3.我们通过ps ajx命令查看系统的进程
ps ajx中ajx各参数代表的意思
- 参数a,表示不仅列出当前进程,也列出所有其他用户进程;
- 参数x,表示不仅列出控制终端的进程,也列出所有无控制终端的进程;
参数j,表示列出与作业控制相关的信息;
上图显示的是部分守护进程,因为精灵进程跟终端没有关系,所以TTY显示是‘?’的进程都为精灵进程;同时我们也可以看到,精灵进程的TPGID都为-1,且进程的COMMAND(执行命令)都用[]括号;
守护进程通常都已‘d’结尾,我们可以通过ps ajx|grep -E ‘d$’命令查看
init进程的id为1,所以上述父进程id为1的都是init进程创建的子进程,且每个守护进程的会话i