我有一个用C编写的linux程序。它的目的是检查fork()
调用的行为和由此产生的子进程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同时执行两个进程。所以输出通常是相互补间的。 – 2014-10-05 13:13:39
谢谢,写作答案,我可以接受。还有什么原因导致孩子成为1,而不是父母是什么? – user3001499 2014-10-05 13:17:02