为什么fork()在subprocess中返回0?

正如我们所知,fork()将返回两次,即两个PID。 subprocess的PID在父进程中返回,并在subprocess中返回0。

为什么0在subprocess中返回? 有什么特别的原因呢?

更新我被告知在父进程和subprocess之间使用链表,父进程知道subprocess的PID,但是如果没有孙子,那么subprocess就会得到0.我不知道是否正确?

Solutions Collecting From Web of "为什么fork()在subprocess中返回0?"

至于你在标题中提出的问题,你需要一个被认为是成功的价值,而不是一个真正的PID。 0返回值是系统调用的标准返回值,表示成功。 所以它被提供给子进程,以便它知道它已经成功地从父进程分叉了。 父级父进程接收子级的PID,如果子级未成功分叉,则接收-1。

任何进程都可以通过调用getpid()来发现自己的PID。

至于你的更新问题,看起来有点落后。 任何进程都可以使用getppid()系统调用来发现其父进程。 如果一个进程没有跟踪fork()的返回值,那么没有直接的方法来发现它的子进程的所有PID。

你需要返回一些不能成为真正的PID的东西(否则孩子可能会认为它是父母)。

0符合法案。

从文档 :

返回值

成功完成后,fork()向子进程返回值0,并将子进程的进程ID返回给父进程。 否则,将值-1返回给父进程,不创建子进程,并将全局变量errno设置为指示错误。