【APUE】守护进程

定义

守护进程(daemon)是生存期长的一种进程。通常在系统引导装入时启动

举例

  • kswapd 守护进程称为内存换页守护进程,支持虚拟内存在子系统在经过一段时间后讲脏页面写回磁盘来回收这些页面
  • flush 守护进程在可用内存达到设置的最小阈值时讲脏页面冲洗至磁盘;也定期的将脏页面数据冲洗回磁盘来减少在系统出现故障时发生数据丢失。多个冲洗守护进程可以同时存在,每个写回设备都有一个冲洗守护进程
  • sync_supers 守护进程定期的将文件系统元数据冲洗至磁盘
  • jbd 守护进程帮助 实现了ext4文件系统中的日志功能

用户层守护进程的父进程时init进程

编程规则

  1. 调用umask 将文件创建模式屏蔽字设置为一个已知值(通常是0)
  2. 调用fork,然后使父进程 exit
  3. 调用setsid创建一个新会话
  4. 将工作目录改为根目录
  5. 关闭不再需要的文件描述符
  6. 某些守护进程打开/dev/null使其具有文件描述符0、1、2,这样任何一个试图读标准输入,写标准输出和错误输出的库例程都不会产生任何效果

出错记录

守护进程没有控制终端,所以不能简单的将消息写到标准错误上,大多数守护进程都使用syslog;

有3种生产日志消息的方法:

  1. 内核进程可以调用log函数,任何用户都可以打开并读取/dev/klog设备来读取这些信息
  2. 大多数用户进程(守护进程)调用syslog函数生产日志消息,这些消息发送至Unix域数据报套接字/dav/log
  3. 无论一个用户是否再此主机上,还是在通过 TCP/IP网络连接到此主机的其他主机上,都可将消息像UDP端口514

单实例守护进程

文件和记录锁机制,在运行程序前,先对文件进行加锁(将进程id写到文件)

惯例

  • 若守护进程是用锁文件,那么该文件通常存储在/var/run目录中
  • 若守护进程支持配置选项,那么配置文件通常存放在/etc目录中,名称通常是name.conf
  • 守护进程可用命令行启动,但他们通常是又系统初始化脚本之一(/etc/rc或者/etc/init.d/)启动的
  • 若一个进程支持配置文件,进程启动时读该文件,但启动之后就不在读该文件;为了避免修改配置后需要重启进程,某些守护进程将捕捉SIGHUP信号,当接收到该信号时重新读配置文件