loopong 发表于 2013-07-07 10:54

关于两次fork的一个问题

本帖最后由 loopong 于 2013-07-07 10:55 编辑

最近看到有不少地方调用两次fork函数,fork之后,再调用一次fork,这样就有父,子,孙子三个进程,父进程再调用exit退出,孙子进程就被init接管了,实际上与最初的父进程脱离了关系,就不会僵死了。
这里有个问题,那就是孙子进程被init接管了,但子进程没有,子进程不是就变成僵尸进程了吗,搞来搞去,还是产生了一个僵尸进程。

linux_c_py_php 发表于 2013-07-08 10:59

那不是万能解决方案啊,孙子进程睡了2秒,保证中间进程先退出。

lolizeppelin 发表于 2013-07-08 18:22

fork两次不是因为僵死啊

是为了成为守护进程啊..........

eotian 发表于 2013-07-22 15:03

子进程退出了,才有孙子被init接管这一说,子进程怎么会成为僵死?

_lele 发表于 2013-07-30 08:11

本帖最后由 _lele 于 2013-07-30 08:37 编辑

父进程退出了,但子进程不会立刻成为僵尸进程的吧,只有在孙子进程退出了,且子进程也要退出之后子进程可能会成为僵尸进程的吧?但这里的情况应该是父进程退出了,同一命名空间的init进程应该会成为子进程的父进程的。。。。僵尸进程怎么产生的。?必须满足两个条件,1:进程被另一个进程或被用户杀死,2:父进程在子进程终止时没有调用wait4系统调用。所以你说的情况不会让子进程成为僵尸进程。你这里的子进程在父进程退出前没有退出,应该是被其它进程接管了,但是不是init就不知道(应该是同一命名空间的init进程)。
页: [1]
查看完整版本: 关于两次fork的一个问题