概念
守护进程也称精灵进程,是运行在后台的一种特殊进程。守护进程独立于控制终端并且周期性的执行某种任务或者等待处理某些打算的事件。可认为守护进程目的就是防止终端产生的一些信号让进程退出
特点
- 所有的守护进程都没有控制终端,其终端名(TTY)设置为问号(?)。
- 自成会话,自成进程组。不与其他会话或进程组相互关联,干扰。所以一般一个守护进程的进程ID,组ID,会话ID都相同。(自成进程组这点说的也不太严谨,若父进程是守护进程,父进程fork的子进程也是守护进程。这时父子进程属于同一进程组)
- 命令以‘d’结尾
- 守护进程不受用户登录注销的影响,当你注销或者重登后,守护进程一直在运行。
- 生存期长,在系统引导装入时启动,仅在系统关闭时终止。
- 在后台运行(原因可归结于没有控制终端)
- 大多数的守护进程都以root特权运行。
Linux大多数服务器都是由守护进程实现。如:web,http,阿帕奇等。
守护也完成许多系统任务,如:作业规划进程crond。
用户层守护进程
用户层没有终端的原因可能是调用了setsid(会在下面细讲)函数的结果。大多数用户层守护进程都是进程组的组长进程以及会话的会话首进程,而且是这些进程组和会话中的唯一进程(rsyslogd是一个例外)。
我们通常所说的1号进程init就是一个系统守护进程。除了其他工作外,主要负责启动各运行层析的系统服务。这些服务通常是在它们自己拥有的守护进程的帮助下实现的。此外,init就是用户层进程的父进程。
(上图中的各选项与本图中的头部一一对应)
内核线程(内核守护进程)
(其实也叫内核进程,Linux没有真正意义上的线程,都是用进程