Re dies:在他们的父母去世后 僵尸进程去哪里

僵尸进程是一个已经完成执行的进程,但在进程表中仍然有一个条目(父级没有读取其退出代码,或者换句话说,它没有被“收获”)。

Orphan 进程是一个进程,其父进程已经完成,尽管它仍然在运行(其父进程已经“过世”,但它仍然“活着”)。在这种情况下,init将采用它并等待它。

所以考虑一下:

int main(int argv, char *argc[]) {
    pid_t p=fork();
    if (p<0) {
        perror("fork");
    }
    // child
    if (p==0) {
        exit(2);
    }
    // parent sleeps for 2 seconds
    sleep(2);
    return 1;
}

在这里创建的子进程将是一个僵尸 2 秒,但是当父进程完成时,它的状态是什么?

它在进程表中的条目会发生什么变化?

init是否也采用了“孤儿僵尸”(如上述)并被其收获?

13

根据man 2 wait

只要没有通过等待从系统中删除僵尸,它将消耗内核进程表中的一个插槽,如果这个表被填充,那么它将无法再创建一个“僵尸进程”()。

当父进程完成时,子进程(即使是僵尸进程)将被init采用。然后,正如您所说,initwait()作为其退出状态。

所以,我不认为“孤儿僵尸”是任何特例。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(505)
电脑按键精灵:GDK信号、按键和按键掩码(what does gdk mean)
上一篇
一个程序可以有多个进程:一个项目可以有多个起源吗 (extra origin)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(45条)