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

zan*_*ngw 4 linux fork process

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

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

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

jxh*_*jxh 6

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

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

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