APUE读书笔记-第十三章-守护进程

来源:互联网 发布:大数据商业计划书 编辑:程序博客网 时间:2024/06/18 02:50
  1. 用户层守护进程的父进程是init进程
  2. 守护进程编写规则
    (1)umask将文件模式创建屏蔽字设置为一个已知值(通常为0)
    (2)调用fork,然后使父进程exit,保证了子进程不是一个进程组的组长进程
    (3)调用setsid创建一个新会话,由于该进程不是一个进程组的组长进程,会发生以下三件事
    (a)该进程变成新会话的会话首进程,此时,该进程时新会话中的唯一进程
    (b)该进程成为一个新进程组的组长进程,新进程组ID是该调用进程的进程ID
    (c)该进程没有控制终端,若果在调用setsid之前该进程有一个控制终端,那么这种联系也被切断
    (4)将当前工作目录改为根目录,或者更改到某个特定位置
    (5)关闭不需要的文件描述符(可以使用open_max函数或getrlimit函数来判定最高文件描述符值)
    (6)某些守护进程打开/dev/null使其具有文件描述符0、1和2

  3. 产生日志消息的三种方法
    (1)内核例程可以调用log函数
    (2)大部分用户进程(守护进程)调用syslog函数来产生日志消息,这使消息被发送到UNIX域数据报套接字/dev/log
    (3)无论一个用户进程是在此主机上还是在通过TCP/IP网络连接到此主机的其他主机上,都可将日志消息发送向UDP端口514,syslog函数从不产生这些UDP数据报

  4. 编写守护进程的惯例
    • 若守护进程使用锁文件,那么该文件通常存储在/var/run目录下(守护进程可能需要超级权限才能在该目录下创建文件),锁文件的名字通常是name.pid,其中那name是该守护进程或服务的名字
    • 若守护进程支持配置选项,那么配置文件通常存放在/etc目录下,配置文件的名字通常是conf
    • 守护进程可用命令行启动,但通常它们是由系统初始化脚本之一启动的,如果在守护进程终止时,应当自动重启它,则我们可以在/etc/inittab中守护进程包括respawn记录项,这样init就将重新启动该守护进程
    • 若一个守护进程有一个配置文件,那么当该守护进程启动时会读该文件,但在此之后一般就不会再查看它,为了避免配置文件更改后守护进程需要停止,再启动使配置文件生效,某些守护进程将捕捉SIGHUP信号,当它们接收到该信号时,重新读配置文件。因为守护进程并没有与终端相结合,它们或者是无控制终端的会话首进程,或者是孤儿进程组的成员,所以守护进程没有理由期望接收SIGHUP。于是,守护进程可以安全的=地重复使用SIGHUP