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);
  }