#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
int status;
int pid = fork();assigned to variable "pid"
if(pid == 0)
{
printf("I am the child with pid = %d\n", getpid());
}
else
{
printf("I am the parent with pid = %d\n", getpid());
waitpid(pid, &status, 0); // line 51
}
return 0;
}
在第51行,请澄清&#34; pid&#34;参数。这个过程会等待什么?
答案 0 :(得分:1)
fork
为子进程返回0
,对错误返回-1
,为父进程返回其他内容。 else
开始父进程的部分,这意味着pid
中的waitpid
包含子进程的PID。
引用man wait
:
来判断
waitpid()
系统调用暂停执行调用 处理 直到pid
参数指定的子项已更改状态。默认情况下,waitpid()
只等待被终止的孩子,但这种行为是模式的 可以通过options
参数[...]
简而言之,waitpid
等待子进程终止。
答案 1 :(得分:0)
如果fork成功,fork会向子节点返回0,并返回父节点(新分叉的子进程的(正)pid)。在此声明中,父母等待孩子的终止。
答案 2 :(得分:0)
on success fork会将child id返回给parent,将0返回给child,
waitpid(pid, &status, 0)
;
0 - 指示选项 父母将等到孩子被终止。