【发布时间】:2012-09-15 02:48:02
【问题描述】:
我正在 Ubuntu 中学习进程及其行为,但我对 wait() 有点困惑。所以我的问题是:
- 语句 while(wait(NULL)>0); 是如何工作的?
- wait()中NULL的作用是什么?
我已经在终端中看到了输出,但是即使它执行了 wait() 函数,父级也在执行并生成子级。父母执行不应该停止吗?代码如下:
int main(int argc, char *argv[])
{
pid_t childid;
if(argc!=2)
{
printf("Please provide an argument in terminal! \n");
return 0;
}
int i,n=atoi(argv[1]);
for(i=0;i<n;i++)
{
childid=fork();
if(childid==0)
{
printf("Inside Child process! \n My id is %d\n",getpid());
break; // creating fan process structure
}
else
if(childid>0)
{
printf("Inside Parent Process! \n My id is %d\n",getpid());
}
}
while(wait(NULL)>0);
printf("After While Statment!\n My id is %d\n My parent ID is %d\n Child id is %d\n",getpid(),getppid(),childid);
}
我知道这是一个非常蹩脚的问题,但这是人们学习的方式:)
谢谢
【问题讨论】:
-
您可能需要查看
wait的手册页:linux.die.net/man/2/wait -
(@Kiril:kernel.org 上的 Linux 手册页更漂亮,并且保持最新kernel.org/doc/man-pages/online/pages/man2/wait.2.html)
-
@Mat - 我不知道。谢谢:)
标签: c linux ubuntu-10.04 wait waitpid