2008-09-12 41 views
2

我目前在操作系统课上,我的老师花了一半的时间讨论PID。许多人都知道,她提到流程知道其父母的身份。是否有孩子的PID?

我的问题是这样的:

一个进程的PCB是否知道它的孩子的ID?如果是这样,那么获得它的途径是什么?

回答

5

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

3

当您在* nix上使用fork()时,返回值是父进程中子进程的PID,子进程中为0。这是找出答案的方法之一。不知道他们是否跟踪进程产卵的“树”,我认为这取决于你使用的操作系统,但是因为当你杀死bash(或任何shell)时,所有正在运行的孩子也会被杀死,所以我认为像系统一样,UNIX也会跟踪这一点。

2

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

1

Process的PCB知道其孩子的ID。

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

如果Fork()返回负值,则子进程的创建不成功。 如果Fork()将零返回给新创建的子进程。 如果Fork()将正值作为子进程的进程ID返回给父进程。