C fork调用未执行子代码
这是我更新的代码片段C fork调用未执行子代码,c,fork,C,Fork,这是我更新的代码片段 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
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)
for(int i=0;i某些子进程在父进程死亡之前可能没有时间打印
在结束父进程之前,您需要等待子进程
还可能存在多个子进程同时写入同一输出流的问题。(有人能验证这是否是一个潜在问题吗?我不确定程序是否完成了最初的预期任务
基本上
for (i=0 ; i<N ; i++) {
print("Forking\n");
fork();
}
或者在代码段中有默认值:
到退出(0);
让孩子们死去(可怕的话)将提供预期的结果。如果父进程被终止,那么子进程也将被终止。因此,我们需要通知父进程等待子进程完成其工作。在程序中使用等待或等待pid
wait
将阻止调用进程,直到其任何一个子进程终止
waitpid
将阻止调用进程,直到第一个agrument中提到的子进程终止。错误出现在未显示的代码中,很可能是您在案例0中调用的函数(例如,如果它没有调用\u exit
,这可能是您的问题)。给我们一个完整的、可编译的、自包含的示例来演示这个问题。如果某个函数中的代码返回,这不是很简单吗?我忘了提到退出(0)这里。它在我的实际代码中。仍然有1或2个进程从未命中子代码,但父代码已被执行。您应该提供一个输出,突出显示您认为出错的地方。但是,在child部分,我调用的是一个未被执行的函数。(正如我所提到的,这种行为并不适用于所有子进程。只有1个或2个进程挂起)在这种情况下,它将取决于函数正在执行的操作。对调用fork()
的频率没有限制。
for (i=0 ; i<N ; i++) {
print("Forking\n");
if (fork()) exit(0);
}