现在的位置: 首页 > 综合 > 正文

daemon函数的步骤

2012年11月30日 ⁄ 综合 ⁄ 共 602字 ⁄ 字号 评论关闭

1.fork

    调用fork,终止父进程。如果进程是以shell命令方式从前台启动,当父进程终止时,shell就认为命令执行完了。这可以自动使子进程在后台运行。子进程继承了父进程的进程组号,但是组号和它的进程号不一样,所以它就不是进程组头,这是调用setsid所必需的。

2.setsid

    setsid创建一个新的登录会话,该进程变成新会话的会话头和新的进程组组长,不再有控制终端。

3.忽略SIGHUP信号并再次fork

    在SVR4中,当没有控制终端的会话头进程打开终端设备时,该终端自动成为这个会话头的控制终端。但通过第二次调用fork,可以保证这次生成的子进程不再是一个会话的头,因此它不会获得控制终端。这里必须忽略SIGHUP信号是因为当会话头终止时,该会话中的所有进程都会收到SIGHUP信号。

4.为出错处理函数设置标识

5.改变工作目录并清除文件模式创建掩码

6.关闭所有打开的文件描述字

7.用syslogd处理错误

 1 #define MAXFD 64
2 void Daemon()
3 {
4 int i;
5 if ((pid = fork()) != 0)
6 exit(0);
7 setsid();
8 signal(SIGHUP, SIG_IGN);
9 if ((pid == fork()) != 0)
10 exit(0);
11 chdir("/");
12 umask(0);
13 for (i = 0; i < MAXFD; ++i)
14 close(i);
15 }

抱歉!评论已关闭.