我目前正处于操作系统课程中,我的老师花了一半的时间讨论PID。众所周知,她提到过程知道他们父母的身份证。
我的问题是:
进程的PCB是否知道其孩子的ID?如果是这样,那么获得它的方法是什么?
答案 0 :(得分:5)
据我所知,进程没有明确的子进程PID列表,但可以很容易地构建,因为进程应该知道它生成了哪个子进程。例如,UNIX fork()调用返回父进程中的子PID和子进程中的0,Windows上的CreateProcess()返回(IIRC)创建的新进程的PID。
答案 1 :(得分:3)
在* nix上使用fork()
时,返回值是父进程中子节点的PID,子进程中为0。这是找到答案的一种方法。
不确定他们是否跟踪过程产生的“树”,我认为这取决于你使用的是什么操作系统,但是当你杀死bash(或任何shell)时,所有正在运行的孩子也被杀死了,我想UNIX像系统一样跟踪这个。
答案 2 :(得分:2)
如果您正在使用Linux或实现Unix API的任何东西,当进程调用fork()来创建子进程时,父进程接收子PID作为返回码,如果fork失败则接收-1。子进程获得零返回码。
答案 3 :(得分:1)
Process的PCB知道孩子的身份证。
我们知道Fork()用于创建进程。它不带参数并返回进程ID。创建新的子进程后,父进程和子进程将执行fork()后面的下一条指令。 我们必须将父母与孩子区分开来。这可以通过测试fork()的返回值来完成。
如果Fork()返回负值,则子进程的创建将失败。 如果Fork()向新创建的子进程返回Zero。 如果Fork()将正值作为子进程的进程ID返回给父进程。