【问题标题】:Why the return value of fork() is not in the reverse way?为什么 fork() 的返回值不是反向的?
【发布时间】:2016-03-11 15:30:03
【问题描述】:

我们知道fork()创建了一个新的子进程并将子进程的PID返回给父进程,将0返回给子进程。我在想为什么他们以这种方式设计它(返回值),为什么返回值不是相反的顺序。我认为将父母的PID返回给孩子并将0返回给父母也可以工作,每个孩子都会知道谁是它的父母,每当它被终止时,它都会向其各自的父进程发出信号,这种做法会产生什么后果?我错过了什么吗?

【问题讨论】:

  • 父母需要为孩子wait,所以它需要孩子的PID。不是反过来。孩子已经可以很容易地得到父母的PID了。

标签: linux operating-system


【解决方案1】:

之所以这样,是因为任何孩子都可以通过调用getppid获得其父母的pid,而父母不知道fork告诉它的孩子的pid是什么。

如果父母想等待特定的孩子退出,它需要将孩子的pid传递给waitpid

【讨论】:

  • 我认为如果是相反的方式那么必须设计一个函数来获取父母的孩子的pid。所以我认为这不是它背后的真正原因。
  • @RajeevSingh 一个进程可以有多个子进程,但只有一个父进程。所以getppid 总是会返回调用进程父进程的pid。即使您可以获得子 pid 的列表,您也需要知道哪个是哪个。
【解决方案2】:

子进程可以通过getppid()获取父进程的PID。因此父进程需要fork来获取子进程的PID

【讨论】:

    【解决方案3】:

    如果他们设计的一样,fork() 会返回 0 给父进程,那么在一个父进程的情况下创建多个子进程。

    如果多个 fork() 创建了一个子进程并且所有都返回 0 给同一个父进程。无法识别各个子进程,并旨在将子进程 id 返回给父进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-04
      • 2022-12-10
      • 1970-01-01
      • 2017-02-14
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多