一个关于Linux守护进程创建的问题
冬生0 2014-04-16 09:58:03 大家好!有个关于Linux创建守护进程的问题请教各位,代码如下,问题在最后。
谢谢!
注:这个创建守护进程的过程不严谨,没有按照书上的来,请大家忽略这个,重点关注最后的问题。
#include <fcntl.h>
#include <sys/resource.h>
int daemonize(const char * cmd)
{
int ret = 0;
int i, fd0, fd1, fd2;
pid_t pid;
// clear file creation mask
umask(0);
//become a session leader to lose contrlling tty
if( (pid = fork()) < 0) //成为守护进程-------- 1
{
ret = -1;
printf("cant fork");
}
else if (pid !=0)
{
printf("parent");
ret = -1;
}
if(ret == 0)
{
sleep(20); // 等待sleep 20 秒 or do something else,------- 2
}
return ret;
}
int main()
{
int ret = 0;
printf("create a daemon\n");
ret = daemonize("daemon exp");
if(ret == 0)
printf("daemon create\n"); // 打印 ------- 3
sleep(30);
return 0;
}
// 问题:在1处已经成为守护进程,那么为什么还要在2处sleep20秒之后,才打印 3 处的" daemon create “ ?
我认为无论在2处做什么事情,都不影响3的输出,因为3在父进程中。
比如在服务器上先后创建守护进程a,b。a负责监听客户请求(类似于上面的2处),如果a一直在监听,没有返回,那么b进程是不是就无法创建了呢 ?