APUE 阅读笔记(chapter 13)——守护进程

        本章主要讲述Linux当中常见的进程——守护进程的一些知识。包括守护进程的特征、守护进程编程规则、错误处理、单实例守护进程和守护进程的一些惯例。

1、守护进程的特征:守护进程常常在系统自举时启动,在系统关闭时退出,常驻在内存中完成一些日常处理。守护进程通常运行在后台,所以守护进程没有控制终端。守护继承的父进程通常是以超级用户权限运行。内核级守护进程没有控制终端,用户级守护进程由于调用了setsid函数,也没有守护进程。大多数守护进程是进程组首进程及会话首进程,而且此进程组当中只有一个进程。大部分守护进程的父进程是init进程(进程ID为1)

2、编程规则:本节主要介绍了编写守护进程所需要的一些规则:

  • 守护进程的umask值为0:因为守护进程需要创建一些文件,因此需要保证所有权限对守护进程都是开放的。
  • 调用fork使父进程退出:守护进程在子进程当中运行。这保证了如果守护是一个shell命令,则父进程终止使得shell认为命令终止;此进程绝对不是一个组长进程。
  • 调用setsid使得当前进程成为会话首进程;
  • 将当前工作目录切换到根目录:保证可以卸载文件系统;
  • 关闭不需要的文件描述符;
  • 将进程的标准输出、标准输入、标准出错都定位为/dev/null。
3、出错记录:错误信息由3种情况产生:内核例程——>/dev/log、TCP/IP网络——>UDP port514、用户例程——>/dev/klog。这些错误信息最终都汇聚到syslogd当中。

  • void openlog(const char *ident, int option, int facility);
  • void syslog(int priority, const char *format);
4、单实例守护进程:在任一时刻,需要保证只有一个守护进程副本在运行。因此需要提供一种机制来保证每次只运行一个副本。

  • 文件锁机制(例13-2:在每一次运行一个守护进程时,都对一个文件进行加锁,加锁之后将文件长度截断为0并将守护进程的pid写入文件当中)
5、守护进程惯例:

  • 若守护进程使用锁文件,则锁文件的目录在/var/run目录中
  • 若守护进程支持配置文件,那么配置文件通常在/etc目录
  • 守护进程通常是shell脚本,由/etc/init.d/*或者/etc/initab启动,并且终止之后应自动重启
  • 若守护进程有配置文件,则守护进程启动时需要去读配置文件信息(例13-3:首先运行守护进程,将守护进程的SIGHUP处理程序改为默认,将进程屏蔽所有信号,创建线程,等待接收SIGHUP信号,若接收到SIGHUP信号则重读配置文件)

你可能感兴趣的:(APUE 阅读笔记(chapter 13)——守护进程)