Ubuntu 中的 wait() 奇怪行为

Ubuntu 中的 wait() 奇怪行为

我编写了以下程序并在终端中执行。但我很困惑,程序没有显示结果,因为互联网上描述了等待行为。我从一本书中复制了这段代码。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
pid_t childid;

if(argc!=2)
{
    printf("Please an argument at terminal\n");
    return 0;
}

int i,n = atoi(argv[1]);

for(i=0;i<n;i++)
{
    childid=fork();
    if(childid==0)
    {
        //sleep(20);
        break;
    }
}
while(wait(NULL)>0);

printf("i= %d\n Process ID %d\n Parent ID %d\n Child ID %d\n",i,getpid(),getppid(),childid);

return 0;

}

父进程是否应该执行最后的“printf”语句 n 次,其中 n 是创建的子进程的数量。当父进程调用 while(wait(NULL)>0); 并且子进程仍在执行时会发生什么?

谢谢

答案1

wait()系统调用暂停调用进程的执行,直到其某个子进程终止。

wait() 返回状态已改变(或终止)的子进程的 pid。如果出现错误(即没有子进程需要等待),则返回 -1。

因此,while 循环在子进程(分叉进程)中将执行 0 次。而在父进程中,它将执行 n(子进程数量)次。

该程序将打印最后一条消息 n+1 次。(主程序中 1 次,子程序中 n 次)

相关内容