有孩子的PID吗?

时间:2020-03-05 18:52:34  来源:igfitidea点击:

我目前在操作系统课程中,我的老师花了一半的课堂时间谈论PID。她提到,众所周知,进程知道其父级的ID。

我的问题是这样的:

进程的PCB是否知道其子代的ID?如果是这样,如何获得它呢?

解决方案

回答

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

不知道他们是否跟踪进程生成的"树",我认为这取决于我们使用的操作系统,但是由于我们杀死bash(或者任何shell)时,所有正在运行的子级也会被杀死,我认为像UNIX一样的系统也会跟踪这一点。

回答

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

回答

如果我们使用的是Linux或者任何实现Unix API的工具,则当进程调用fork()创建子进程时,父进程将收到子PID作为返回码,如果分叉失败,则返回-1. 子进程将获得零返回码。