C - 并行执行fork()时等待(NULL)的含义

Yem*_*lat 5 c fork multiprocessing

在下面的代码中,forks实际上是并行运行还是一个接一个地运行?

是什么意思wait(NULL)

(该程序创建n个子进程,n通过命令行提供)

int main ( int argc, char *argv[] ) {
    int i, pid;

    for(i = 0; i < atoi(argv[1]); i++) {
        pid = fork();
        if(pid < 0) {
            printf("Error occured");
            exit(1);
        } else if (pid == 0) {
            printf("Child (%d): %d\n", i + 1, getpid());
            exit(0); 
        } else  {
            wait(NULL);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Edw*_*uck 6

它们并行运行,直到其中一个等待.

wait(NULL)或更准确地说,wait(0)等到子进程状态发生变化.要了解有关Unix/Linux C api调用的信息,请man <function Name>在命令行中键入.你需要习惯阅读这些页面,所以现在就开始吧.

在你的情况下

man wait
Run Code Online (Sandbox Code Playgroud)

会给你你需要的东西.

由于你只fork(...)编过一次,所以你只有一个孩子.父进程等待直到它改变状态,并且因为fork期间子进程的状态与fork之前的父进程状态(运行)相同,可能的结果是父进程等待直到子进程死亡.然后父母将继续执行,但由于在wait(...)通话后没有太多事情要做,它也会很快退出.