gpt4 book ai didi

c - fork 调用不执行子代码

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:53 26 4
gpt4 key购买 nike

这是我更新的代码片段

for (int i=0; i<30; i++){

printf("Forking\n");

tmpPid = fork();

switch(tmpPid)

{
case -1:

printf("Error");
break;
case 0:

printf("Fork success for proc %d\n", i);
//call some function
_exit(0)
break;

default:

printf("Fork succeed");
//store the pid in a vector
break;
}
}

//iterate through the vector and wait on each process.
// waitpid(vectorList[i], &exitStatus, WNOHANG)

几乎 15-18 个子进程的 fork 工作正常。但是对于某些进程,子代码根本没有执行,子进程就挂了。 (即,e fork() 只返回子 ID 但不返回零)。如果我通过调用一些其他虚拟函数在 for 循环内购买更多时间,则不会出现此问题。谁能告诉我问题出在哪里?是否有必要在多个 fork 之间放置延迟?

谢谢

最佳答案

我不确定该程序是否按照最初的预期执行。

基本上

  for (i=0 ; i<N ; i++) {
print("Forking\n");
fork();
}

从末尾开始推理 N == 30

  • for i == 29: childparent 结束 for 循环并死亡
  • 对于 i == 28: parent 还需要做 29 child 也是...

等...

显示的不是 30 个“ fork ”,而是 2^0+2^1+2^2+...+2^29“ fork ”。

2^N-12^30 - 1,或 1,073,741,823 分支。

系统可能会提示并挂起,达到 ulimit/系统/窗口/用户/shell 限制,具体取决于您的操作系统。

也许

  for (i=0 ; i<N ; i++) {
print("Forking\n");
if (fork()) exit(0);
}

或在代码段中有 default:exit(0);children 死(可怕的词)将提供预期的结果.

关于c - fork 调用不执行子代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14335181/

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