Apue:daemon

daemon特性

注意大部分的守护进程都有超级用户特权。没有一个守护进程具有控制终端。
内核守护进程以无控制终端方式启动。
用户守护进程缺少控制终端有可能是调用了setsid。所有用户守护进程都是进程组的组长进程以及会话的首进程,而且是这些进程组合会话中的唯一进程。

daemon编程准则

1.调用umask(0),把屏蔽字设置为0。这样做是为了防止继承来的文件屏蔽字可能会拒绝设置某些权限。
2.调用fork,并且是父进程exit。这样是为了让调用这个程序的东西(例如shell)可以乘早知道父进程终止,从而尽早返回。因为我们要生成的是一个daemon。并且fork之后,子进程的ID改变了,这样它就不会是一个进程组的组长,从而可以使得我们调用第三步中的setsid
3.调用setsid创建一个会话。调用setsid之后,进程就变成了一个会话的首进程,一个新进程组的组长,并且没有控制终端。
4.将当前目录更改为根目录。从父进程继承过来的目录可能是mount在别的文件系统中,在操作系统启动的时候,我们只mount了根目录,所以daemon进程需要把当前目录更改为根目录,否则就有可能造成工作目录还没有mount的情况。
5.关闭不需要的文件描述符。
6.一些守护进程让0,1,2号文件描述与/dev/null相关联,这样任何一个试图读写的库例程都不会产生任何效果。

出错日志

你可能感兴趣的:(Apue)