简介

  1. 守护进程是生存期长的一种进程。
  2. 它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。
  3. 他们常常在系统引导装入时启动,在系统关闭时终止。

守护进程的特性

  1. 在后台运行
  2. 与其运行前的环境隔离开来。 这些环境包括未关闭的文件描述符、控制终端、会话和进程组、工作目录以及文件创建掩码等。 这些环境通常是守护进程从执行它的父进程(特别是 shell)中继承下来的。
  3. 启动方式特殊, 它可以在系统启动时从启动脚本/etc/rc.d 中启动,可以由 inetd 守护进程启动,可以由 crond 启动,还可以由用户终端(通常是 shell)执行。

总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。 因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。

守护进程编程规则

  1. 在后台运行,调用 fork ,然后使父进程 exit
  2. 脱离控制终端,登录会话和进程组,调用 setsid()使进程成为会话组长
  3. 禁止进程重新打开控制终端
  4. 关闭打开的文件描述符,调用 fclose()
  5. 将当前工作目录更改为根目录。
  6. 重设文件创建掩码为 0
  7. 处理 SIGCHLD 信号

实现示例源码

参考 demon