收获僵尸进程

时间:2019-11-23 21:38:41

标签: c linux process children zombie-process

我正在尝试将僵尸进程包裹住,在什么时候获得子进程。我了解从父级调用waitwaitpid时会获得子级进程。

我想知道是否还有其他情况会影响子进程。

我的代码:

int main() {
    int pid = fork();
    int exit_status;

    if (pid == 0) {
        exit(1); // exit immediately from child.
    } else {
        pause(); // keep the parent running  
    }
}

现在,当我运行ps -a时,一切都有意义。父进程正在运行,子进程已退出,但尚未获得:

$ ps -a
  PID TTY          TIME CMD
  442 pts/0    00:00:00 a.out
  443 pts/0    00:00:00 a.out <defunct>
  447 pts/1    00:00:00 ps

但是,当我将代码更改为:

int main() {
    int exit_status;

    if (fork() == 0) {
        // exit immediately from child.
        exit(1);
    } else {
        // exit from parent immediately
        exit(1);      
    }
}

看来孩子和父母都被收割了。我在网上阅读的所有内容都指出,该子对象将由init进程(pid 1)继承,并且仍然是僵尸进程。如果是这种情况,在父级退出后,我仍然应该能够看到子级进程。

但是ps -a没有显示任何僵尸子进程...

$ ps -a
  PID TTY          TIME CMD
  470 pts/1    00:00:00 ps

我的子流程发生了什么?

0 个答案:

没有答案