fork_rv返回什么

What does the fork_rv return?

本文关键字:什么 返回 rv fork      更新时间:2023-10-16

我知道fork((创建了一个重复的过程(克隆(,这意味着创建了两个相同的地址空间副本 - 一个适用于父母,一个用于孩子。此过程成为呼叫者的子过程。但是,我对fork_rv中的内容感到困惑(请参阅下面的代码中的评论(

include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
main()
{
int fork_rv;
printf("Before: my pid is %dn",getpid());
fork_rv=fork();
if (fork_rv == -1)
perror("fork");
else if (fork_rv == 0)
printf ("I am the child. my pid=%dn",getpid());
else
printf ("I am the parent. my child is %dn",fork_rv); /* What is inside fork_rv What gets printed exactly? The address of the child?) */
}

fork的Linux手册页引用:

成功,父母返回子程序的pid,并且 0在孩子中返回。失败时,-1在父母中返回,没有创建子过程,并且errno设置了适当的设置。

而 @brian的答案已经正确,也许解释这些返回值背后的逻辑使得更容易理解:

  • -1对于错误,应清楚。
  • 0作为子过程的价值是有意义的,因为子过程始终可以获得自己的pid( getpid()(以及其父过程的pid( getppid()(。
  • 所有值> 0是创建的新子进程的PID,返回到父进程。
    由于一个过程可以具有多个子进程,因此不可能具有" get Child pid"功能:PID应该回来哪个孩子?并有了"获得儿童pids"功能,该功能将返回所有儿童流程pids的列表,找到最新的新儿童过程的pid会很麻烦。