代码:
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之前执行的,所以它们应该是相同的,不是吗?
答案 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
没有将其返回(向父级),则可能很难获得。