gpt4 book ai didi

c++ - Fork 程序在一段时间后给出 进程

转载 作者:行者123 更新时间:2023-11-27 23:56:46 27 4
gpt4 key购买 nike

我正在开发一个使用 fork() 执行各种任务的程序.我正在启动程序,一切正常。我观察到一段时间后(1 天)我被 <defunct> 淹没了进程,超过 600 700 ... 其中 max forks 设置为 500。这是代码:

int numforks = 0;
int maxf = 100;

// READ FROM FILE ...
while (fgets(nutt,2048,fp))
{
fflush(stdout);
if (!(fork()))
{
some_time_intensive_function();
exit(0);
}
else
{
numforks++;

if (numforks >= maxf)
{
wait(NULL);
numforks--;
}
}
}

// DON'T EXIT PROGRAM TILL ALL FORKS ARE FINISHED
while(numforks>0)
{
wait(NULL);
numforks--;
}

// CLOSE READ FILE ...

这个程序一直保持 500 个 fork 像线程池一样运行。

我不太明白什么<defunct>进程是,但我听说它们不是子进程中的错误,如 SEG FAULT发生,而是父进程没有正确等待。

我想阅读 <defunct> s,有解决这个问题的想法吗?

我重复一遍,这会在 1-2 天后发生。

谢谢。

最佳答案

我认为你有两个问题:

首先,wait 可以因子进程终止以外的原因返回(如果确实如此,它将留下一个已失效的进程)。我认为你需要传入一个非空指针,并检查返回的等待状态。仅在适当时递减 numforks。

其次,numforks 不会(有效地)限制子进程的总数。如果父进程启动两个进程,它们将分别继承 numforks 0 和 1。然后每个子进程将启动 500 和 499 个子进程。

我认为您在 time_consuming_process() 之后需要 exit(0)(或 break)。

关于c++ - Fork 程序在一段时间后给出 <defunct> 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42160076/

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