【发布时间】:2014-11-29 22:09:59
【问题描述】:
我有一个在 linux 上用 C 语言编写的小程序。它的目的是检查fork() 调用的行为以及由此产生的子进程
在第一次检查时,一切似乎都很简单。不过
- 有时输出的顺序很有趣
- 有时子 PPID 为“1”,而不是父 PID。
我在它按预期工作和不按预期工作之间找不到任何模式或相关性。
我认为第 2 点可能是由于父进程在子进程完全执行之前死亡造成的。如果是这样,有没有办法阻止这种情况发生。
但是我不知道是什么导致了第 1 点。
代码如下:
#include <stdio.h>
#include <unistd.h>
int main()
{
int x = fork();
if (x == 0)
{
printf("Child:");
printf ("\nChild PID : %d", getpid());
printf ("\nChild PPID: %d", getppid());
printf("\nHello Child World\n");
}
if (x != 0)
{
printf("Parent :");
printf ("\nParent PID : %d", getpid());
printf ("\nParent PPID: %d", getppid());
printf("\nHello Parent World\n");
}
return 0;
}
【问题讨论】:
-
普通程序无法控制输出的顺序——这就是并行处理的意义——CPU同时执行两个进程。所以输出通常是中间补间的。
-
谢谢,写为答案,我可以接受。还有什么原因导致子 ppid 为 1,而不是父 pid 是什么?