LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 893|回复: 3

关于守护进程的问题,请大侠帮忙解答一下啊

[复制链接]
发表于 2008-11-19 12:05:18 | 显示全部楼层 |阅读模式
守护进程:
看到网上有说通过如下方法就可以建立一个守护进程:
if(fork()>0)   exit(0);   
setsid();   
if(fork()>0)   exit(0);

我想知道:
1、第二个if(fork()>0)   exit(0); 做啥子用的?
2、这种实现方式跟只用一次if(fork()>0)   exit(0); 运行时究竟有什么不一样?

谢谢~~
发表于 2008-11-19 12:49:48 | 显示全部楼层
http://fanqiang.chinaunix.net/a4/b7/20010419/125220.html
不过这是最简单的做法
考虑多一点,还有把/设为当前目录,关闭标准输入输出,修改umask等等
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-21 09:22:09 | 显示全部楼层
看了你提供的那个网址大体上明白了,但是我该怎么理解控制了第二次如果不用fork(),控制了一个终端,跟用了fork控制了一个终端又什么样的区别?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-21 11:29:28 | 显示全部楼层
我实验了两种情况:
1)
        if(fork()>0)   exit(0);
          setsid();
          if(fork()>0)   exit(0);
          for(i=0;i<10;i++){
                printf("hello1\n");
                sleep(1);
            }
2)
        if(fork()>0)   exit(0);
          setsid();
          for(i=0;i<10;i++){
                printf("hello2\n");
                sleep(1);
           }
即使使用了第二个fork去释放终端,也可以打印出hello1来啊。这是什么原因?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表