请在C考虑下面的代码:确实linux永远不会结束子进程,直到父节点结束?
int main()
{
pid_t cpid;
cpid = fork();
if (cpid == -1)
{
perror("fork");
return 0;
}
if (cpid == 0)
{
printf("I'm child\n");
_exit(0);
}
else
{
while(1)
{
printf("I'm parent\n");
sleep(1);
}
}
return 0;
}
运行代码后,我希望它运行的孩子,离开它一旦完成。 但是当我运行
pgrep executable_name
或
ps fax
它显示的子进程ID,如果它只是工作过程的历史垃圾或它确实没有结束/终止我不知道孩子的过程?
在此先感谢
为了清楚起见:* only *当进程处于“僵尸”状态时进程表条目存活;所有其他资源都被释放。 – zwol
好吧,这是一个解决方案,并感谢您给出的原因,但不等待父母,直到孩子的状态改变?我想要叉的并行化在第一个地方 – madz
是的,等待块。你也可以设置一个SIGCHLD处理程序,并且只有等到它被触发时才能确保它不会被阻塞。信号在小孩终止时发送。您也可以忽略它,孩子在父母结束时会自动清理。 –