分叉和pid

时间:2011-06-03 23:51:53

标签: c linux fork

代码:

int main(void) 
{
    printf("pid: %d\n", getpid());
    pid = fork();


    if (pid < 0) {
        fprintf(stderr, "Fork Failed!");
        exit(-1);
    } else if (pid == 0) {
        execv("sum", argv);
    } else {
        printf("  pid: %d\n", pid);
        wait(NULL);
    }
}

输出:

pid: 280
   pid: 281

问题:

为什么两个pid不同。我认为它们应该是相同的,因为父节点是在else块中执行的,而父节点是在fork之前执行的,所以它们应该是相同的,不是吗?

2 个答案:

答案 0 :(得分:10)

RETURN VALUE
       On success, the PID of the child process is returned in the parent, 
       and 0 is returned in the child.  On failure, -1 is returned in the parent,
       no child process  is  created,  and  errno  is  set appropriately.

因此,在父进程中,fork()返回已创建的子进程的pid。

答案 1 :(得分:2)

我不会重复nos's answer,因为他完全正确。但我要指出,任何程序都可以通过getpid系统调用检索自己的PID。因此,fork没有理由返回自己的 PID。相反,您可能想知道刚刚分离的过程的PID,如果fork没有将其返回(向父级),则可能很难获得。