我目前正在上一堂操作系统课,我的老师花了一半的时间在讲 PID。她提到,正如许多人所知,进程知道它们父进程的 ID。 我的问题是: 进程的 PCB 是否知道其子进程的 ID?如果是这样,获得它的方法是什么?

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

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

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

进程的 PCB 知道其子进程的 ID。 我们知道 Fork() 用于创建进程。它不带任何参数并返回一个进程 ID。在创建新的子进程后,父进程和子进程都将执行 fork() 之后的下一条指令。在那里我们必须区分父母和孩子。这可以通过测试 fork() 的返回值来完成。 如果 Fork() 返回负值,则子进程创建不成功。如果 Fork() 向新创建的子进程返回零。如果Fork()返回一个正值作为子进程的进程ID给父进程。

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部