gpt4 book ai didi

c - exit(0) 和僵尸进程有什么关系

转载 作者:可可西里 更新时间:2023-11-01 11:51:18 26 4
gpt4 key购买 nike

我发现当我从子部分中删除 exit(0); 时,它无法创建僵尸进程。你能告诉我为什么吗?

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>

int main() {
if(!fork()) {
printf("child pid=%d\n", getpid());
exit(0);
}

sleep(20);

printf("parent pid=%d\n",getpid());
exit(0);
}

最佳答案

僵尸进程是父进程尚未检查的死子进程。在原来的代码中,子进程比父进程早 20 秒结束,所以它是 20 秒的僵尸。如果您删除第一个 exit(0),它们都会存活 20 秒,因为在 child 中,控制权会直接从 if block 的底部传递出去,除非有什么东西阻止它.

因此,如果您删除 child 的 exit(),那么它不仅不太可能在可观察的时间内变成僵尸,而且您应该会看到它另外打印一条“parent pid”消息到它的“子 pid”消息。

关于c - exit(0) 和僵尸进程有什么关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57039808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com