为什么fork()在子进程中返回0?

时间:2014-09-08 06:02:15

标签: linux process fork

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

为什么在子进程中返回0?有什么特殊原因吗?

UPDATE 我被告知在父进程和子进程之间使用链表,父进程知道子进程的PID,但是如果没有孙进程,那么子进程将得到0我不知道这是不是正确的?

4 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:0)

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

0符合要求。

答案 2 :(得分:0)

来自docs

  

返回值

     

成功完成后,fork()会向子项返回值0   处理并将子进程的进程ID返回给父进程   处理。否则,将值-1返回到父进程,   没有创建子进程,并且全局变量errno设置为   表示错误。

答案 3 :(得分:-1)

摘自本书(Unix中的高级编程)

  

fork向子级返回0的原因是进程只能具有   单亲,孩子可以随时致电getppid获取   其父级的进程ID。 (进程ID 0保留给   内核,因此不可能将0用作子进程的ID。