C语言 分叉进程的执行



谁将执行printf行(所有进程完成后的初始进程或每个进程(?

#include<stdio.h> 
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
for(int i=0;i<3;i++) 
{
fork();
}
while(wait(NULL)>0);
printf("finishedn");
}

全部。从代码中可以直截了当。在任何创建的子项中都不会调用任何exit(),它们可以自由执行父项执行的内容。所以每个孩子执行一次printf()。这可以通过编程方式验证,如下所示:

#include<stdio.h> 
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
printf("PID = %dn", getpid());
for(int i=0;i<3;i++) 
{
if (fork() == 0)
printf("PID = %dn", getpid());
}
while(wait(NULL)>0);
printf("PID: %d finishedn", getpid());
}

输出

$ ./a.out 
PID = 120360
PID = 120361
PID = 120362
PID = 120364
PID = 120363
PID = 120366
PID: 120363 finished
PID: 120366 finished
PID = 120367
PID = 120365
PID: 120367 finished
PID: 120365 finished
PID: 120362 finished
PID: 120364 finished
PID: 120361 finished
PID: 120360 finished

从上面的输出可以看出,每个创建的子项执行printf()一次。

最新更新