我知道fork()创建了一个重复的进程(clone),这意味着创建了两个相同的地址空间副本 - 一个用于父级,一个用于子级。此过程成为调用者的子进程。但是,我对fork_rv中的内容感到困惑(请参阅下面的代码中的注释)
include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
main()
{
int fork_rv;
printf("Before: my pid is %d\n",getpid());
fork_rv=fork();
if (fork_rv == -1)
perror("fork");
else if (fork_rv == 0)
printf ("I am the child. my pid=%d\n",getpid());
else
printf ("I am the parent. my child is %d\n",fork_rv); /* What is inside fork_rv What gets printed exactly? The address of the child?) */
}
答案 0 :(得分:2)
从fork
成功时,子进程的PID将在父进程中返回,并且 孩子返回0。失败时,在父项中返回-1,不创建子进程,并正确设置errno。
答案 1 :(得分:0)
虽然@Brian的答案已经正确,但也许解释这些返回值背后的逻辑会让人更容易理解:
getpid()
)以及其父进程的pid(getppid()
)。