1.概念
守护进程也称精灵进程,是在后台运行的一种特殊进程,它脱离控制终端并且周期性的执行某种任务或者等待某种事件的发生,脱离终端是为了避免进程在执行过程中的信息在任何终端上显示,并且进程也不会被任何终端产生的中断信息所终止;linux下的大多 服务器都是用守护进程实现的。比如internet 的inted 和wed 服务器httpd
2.创建守护进程的一般步骤
(1)调用umask重设文件权限掩码
文件权限掩码:指屏蔽掉文件权限中的对应位。例如,有个文件权限掩码为050,它就屏蔽掉了文件组拥有者的可读与可执行权限。由于 fork创建的子进程继承了父进程的文件掩码,这给子进程使用文件带来了麻烦,因此将文件掩码设置为0(即不屏蔽任何权限)可以增强守护进程的灵活性
(2)创建子进程退出父进程
为了脱离控制终端需要推测出父进程,之后的工作由子进程完成。在linux中父进程先与子进程退出会造成孤儿进程,每当发现一个孤儿进程 时就会自动由1号进程(init)收养它,这样原先的子进程就会变成init的子进程
(3)调用setid(void)函数在子进程中创建一个新会话
man 2 setsid 查看关于setsid函数的说明
setsid – creates a session and sets theprocess group ID
#include <unistd.h>
pid_t setsid(void);
setsid() creates a new