我们知道,fork()将返回两次,即两个PID . 子进程的PID在父进程中返回,并在子进程中返回0 .
Why the 0 is returned in the child process? 任何特殊原因?
UPDATE 我被告知链接列表在父进程和子进程之间使用,父进程知道子进程的PID,但是如果没有孙进程,那么子进程将得到0.我不知道它是否正确?
至于你在 Headers 中提出的问题,你需要一个被认为是成功的值,而不是一个真正的PID . 0 返回值是系统调用的标准返回值,表示成功 . 因此,它被提供给子进程,以便它知道它已成功从父进程分叉 . 父父进程接收子进程的PID,如果子进程未成功分叉则接收-1 .
0
任何进程都可以通过调用 getpid() 来发现自己的PID .
getpid()
至于你的更新问题,它似乎有点落后 . 任何进程都可以使用 getppid() 系统调用发现其父进程 . 如果进程没有跟踪 fork() 的返回值,则没有直接的方法来发现其子节点的所有PID .
getppid()
fork()
你需要返回一些不能成为真正PID的东西(否则孩子可能认为它是父母) .
0 符合要求 .
来自docs:
RETURN VALUES成功完成后,fork()向子进程返回值0,并将子进程的进程ID返回给父进程 . 否则,将值-1返回到父进程,不创建子进程,并设置全局变量errno以指示错误 .
3 回答
至于你在 Headers 中提出的问题,你需要一个被认为是成功的值,而不是一个真正的PID .
0
返回值是系统调用的标准返回值,表示成功 . 因此,它被提供给子进程,以便它知道它已成功从父进程分叉 . 父父进程接收子进程的PID,如果子进程未成功分叉则接收-1 .任何进程都可以通过调用
getpid()
来发现自己的PID .至于你的更新问题,它似乎有点落后 . 任何进程都可以使用
getppid()
系统调用发现其父进程 . 如果进程没有跟踪fork()
的返回值,则没有直接的方法来发现其子节点的所有PID .你需要返回一些不能成为真正PID的东西(否则孩子可能认为它是父母) .
0
符合要求 .来自docs: