Unix守护进程

问题描述:

        Unix守护进程

问题解决:

    Unix守护进程没有控制终端,终端名设置为问号(?),终端前台进程组ID设置(TPGID)为-1

守护进程编写规则:

     (1)调用umask将文件模式创建屏蔽字设置为0,由继承得来的文件模式创建出屏蔽字可能会拒绝设置某些权限

     (2)调用fork,然后使父进程退出。这样做实现了一下几点:第一,如果该守护进程是作为一条简单的shell命令启动的,那么父进程终止使得shell认为这条命令已经执行完毕。子进程继承了父进程的进程组ID,但是具有一个新的进程ID,这样就保证了子进程不是一个进程组的组长进程。

     (3)调用setsid创建一个新会话,使调用进程:(a)成为新会话的首进程,(b)成为一个新进程组的组长进程,(c)没有控制终端

     (4)将当前工作目录更改为根目录(chdir),从父进程处继承的当前工作目录可能在一个装配文件系统中,因为守护进程通常在系统引导之前是一直存在的,所以如果守护进程的当前工作目录在一个装配文件系统中,那么该文件系统就不能被拆卸。

    (5)关闭不再需要的文件描述符(getrlimit)判断最高文件描述符值,并关闭直到该值的所有描述符

    (6)某些守护进程会打开/dev/null使其具有文件描述符0/1/2,但是这样做不会产生任何效果,因为守护进程并不与终端设备相关联,所以不能在终端设备上显示输出,也无处从交互式用户那里接受输入。

守护进程实现:

da1

da2

da3

da4

源程序文件:

daemonize.c

posted @ 2013-10-21 22:38  罗松超  阅读(710)  评论(0编辑  收藏  举报