【发布时间】:2013-10-19 20:22:51
【问题描述】:
我正在学习 Linux 中的进程管理,并尝试实现以下 C 程序,其输出打印了 15 个 PID(4 个唯一 PID)。我试图弄清楚进程家族树,但它真的没有帮助我理解为什么 PID 被打印了这么多次。我浏览了几个链接,包括http://u.cs.biu.ac.il/~linraz/os/OS2.pdf、http://www.ibm.com/developerworks/aix/library/au-unixprocess.html、Who executes first after fork(): parent or the child?。但是,我找不到解决方案。如果有人帮助我理解这个问题,那将是非常有帮助的。
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main()
{
printf ( "Parent:%d Child: %d\n",getppid(),getpid()); // To print the PIDs of the parent process and the child process
fork(); //System call to spawn a child process
printf ( "Parent:%d Child: %d\n",getppid(),getpid());
fork();
printf ( "Parent:%d Child: %d\n",getppid(),getpid());
fork();
printf ( "Parent:%d Child: %d\n",getppid(),getpid());
return 0;
}
【问题讨论】:
-
只是要明确一点,(1)父母或孩子是否先运行(甚至同时)是完全不确定的。这仅取决于操作系统当时如何安排它们。 (2) 你写的程序可能会给出一些误导性的结果。取决于他们是如何死的,因为你不看孩子,许多 printfs 将显示
init(进程 pid 1)作为他们的父母,因为他们已经是僵尸。
标签: c operating-system fork