【问题标题】:Parameters of the waitpid()waitpid() 的参数
【发布时间】:2016-01-01 06:09:07
【问题描述】:
#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”参数。这个过程会等待什么?

【问题讨论】:

  • 这里逐字复制作业:-1

标签: c fork pid waitpid


【解决方案1】:

fork 为子进程返回0,在错误时返回-1,并为父进程返回其他内容。 else 开始父进程的部分,这意味着waitpid 中的pid 包含子进程的PID。

引用man wait:

waitpid() 系统调用暂停调用的执行 过程 直到由pid 参数指定的孩子改变了状态。默认, waitpid() 只等待终止的孩子,但这种行为是 mod- 可通过 options 参数 [...]

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

【讨论】:

    【解决方案2】:

    fork 成功时会将子 ID 返回给父级,将 0 传回给子级,

    waitpid(pid, &amp;status, 0);

    1. 参数..) pid - 特定的子 ID。
    2. parameter..) &status - 退出状态,将由孩子发送给父母
    3. 参数..) 选项

    0 - 选项表明 父母会等到孩子被终止。

    【讨论】:

      【解决方案3】:

      如果fork成功,则fork给子进程返回0,并把新fork的子进程的(正)pid返回给父进程。在这个语句中,父母等待孩子的终止。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-20
        • 1970-01-01
        • 1970-01-01
        • 2012-08-29
        相关资源
        最近更新 更多