waitpid() 的参数

Parameters of the waitpid()

#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 行中,请说明 "pid" 参数。这个过程会等待什么?

如果fork成功,fork returns 0到child,returns到parent新fork的(正)pid child 过程。在此语句中,parent 等待 child 的终止。

成功分叉后将 return child id 变为 parent 并且 0 变为 child,

waitpid(pid, &status, 0);

  1. 参数..) pid - 特定的 child ID.
  2. 参数.. ) &status - 将由 child
  3. 发送到 parent 的退出状态
  4. 参数..)选项

0 - 选项表示 parent 会等到 child 结束。

fork returns 0 用于子进程,-1 出错,以及父进程的其他内容。 else 开始父进程的部分,这意味着 waitpid 中的 pid 包含子进程的 PID。

引用 man wait:

The waitpid() system call suspends execution of the calling process until a child specified by pid argument has changed state. By default, waitpid() waits only for terminated children, but this behavior is mod- ifiable via the options argument [...]

简而言之,waitpid等待子进程终止。