首页 文章

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

提问于
浏览
2

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

Why the 0 is returned in the child process? 任何特殊原因?

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

3 回答

  • 0

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

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

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

  • 0

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

    0 符合要求 .

  • 6

    来自docs

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

相关问题