1、SID:会话ID,即会话首进程ID。父进程为0的各进程通常是内核进程,内核进程存在于系统的整个生命周期,以root权限允许,无控制终端,无命令行。
2、Linux使用kthreadd内核进程来创建其他内核进程。init PID=1,是系统守护进程,负责启动各运行层次特定的系统服务。inetd负责侦听网络接口,以便取得来自网络的各种网络服务进程的请求。cron守护进程在定期安排的日期和时间执行命令。sshd守护进程提供安全的远程登录和执行设施。大多数用户层守护进程都是进程组的组长以及会话的首进程。
3、编写守护进程时遵守的规则
(1)首先调用umask将文件模式创建屏蔽字设置为一个已知值。
(2)调用fork,然后使父进程exit
(3)调用setsid创建一个新会话。
(4)将当前工作目录更改为根目录
(5)关闭不在需要的文件描述符
(6)某些守护进程打开/dev/null使其具有文件描述符0、1、2
4、出错记录
syslogd守护进程读取3种格式的日志消息(内核例程调用log函数;用户进程调用syslog函数产生日志消息;网络将日志消息发向UDP端口514)。该守护进程在启动时读配置文件/etc/syslog.conf决定不同种类的消息应发向何处。
//产生日志消息
#include <syslog.h>
//ident为加入日志消息的进程名,facility说明来自不同设施的消息将以不同的方式处理。
void openlog(const char *ident, int option, int facility);
//产生日志消息
void syslog(int priority, const char *format, ...);
5、守护进程的惯例
(1)若守护进程使用锁文件,那么该文件通常存储在/var/run目录中。锁文件的名字通常是:守护进程.pid,如cron守护进程锁文件的名字是:/var/run/crond.pid
(2)守护进程配置文件通常存放于/etc目录,名字通常是:守护进程.conf,如syslogd守护进程的配置文件是:/etc/syslogd.conf
(3)守护进程可以用命令行启动,通常是系统初始化脚本之一(如/etc/rc*或/etc/init.d/*)
(4)某些守护进程捕捉SIGHUP信号,当他们接收到该信号时,重新读配置文件。