Operating system 有孩子吗';什么是PID?

Operating system 有孩子吗';什么是PID?,operating-system,Operating System,我目前在上操作系统课,我的老师花了一半的时间讨论PIDs。她提到,正如许多人所知,进程知道其父进程的ID 我的问题是: 进程的PCB是否知道其子进程的ID?如果是这样的话,获取它的方法是什么?在*nix上使用fork()时,返回值是父进程中子进程的PID,在子进程中为0。这是找到答案的一种方法 不确定他们是否跟踪进程生成的“树”,我认为这取决于您使用的操作系统,但由于当您杀死bash(或任何shell)时,所有正在运行的子进程也会被杀死,我认为类UNIX系统确实会跟踪这一点。据我所知,进程没有子

我目前在上操作系统课,我的老师花了一半的时间讨论PIDs。她提到,正如许多人所知,进程知道其父进程的ID

我的问题是:

进程的PCB是否知道其子进程的ID?如果是这样的话,获取它的方法是什么?

在*nix上使用
fork()
时,返回值是父进程中子进程的PID,在子进程中为0。这是找到答案的一种方法


不确定他们是否跟踪进程生成的“树”,我认为这取决于您使用的操作系统,但由于当您杀死bash(或任何shell)时,所有正在运行的子进程也会被杀死,我认为类UNIX系统确实会跟踪这一点。

据我所知,进程没有子进程PID的明确列表,但它很容易构建,因为一个进程应该知道它产生了哪些子进程。例如,UNIX fork()调用在父进程中返回子PID,在子进程中返回0,Windows上的CreateProcess()返回(IIRC)创建的新进程的PID。

如果您使用的是Linux或任何实现UNIX API的程序,当进程调用fork()时要创建子进程,父进程将接收子PID作为返回代码,如果fork失败,则接收-1。子进程获得零返回码。

进程的PCB知道其子进程的ID

正如我们所知,Fork()用于创建进程。它不接受任何参数并返回进程ID。创建新的子进程后,父进程和子进程都将执行Fork()后面的下一条指令。 在这里,我们必须区分父对象和子对象。这可以通过测试fork()的返回值来实现

如果Fork()返回负值,则创建子进程失败。 If Fork()向新创建的子进程返回零。 If Fork()将正值作为子进程的进程ID返回给父进程