我有以下功能:
void test_fork()
{
pid_t id;
printf("Parent process id: %d\n", getpid());
id = fork();
if (id == 0)
printf("\nChild:");
else if (id > 0)
printf("\nParent:");
else
exit(EXIT_FAILURE);
printf("\nprocess id: %d\n", getpid());
printf("parent process id: %d\n", getppid());
}
我的疑问与其输出有关,特别是有时我会有以下和直接的输出:
Parent process id: 879
Parent:
process id: 879
parent process id: 878
Child:
process id: 881
parent process id: 879
最后一个id等于其父ID(如预期的那样)。
但有时输出是例如:
Parent process id: 858
Parent:
process id: 858
parent process id: 857
Child:
process id: 860
parent process id: 1
最后一个id不等于其父进程id,但它等于1(应该是init进程的id)。
怎么可能?
答案 0 :(得分:2)
这是因为父进程已经在子进程请求其父进程的pid时完成,因此子进程的父进程默认为init
进程。 init进程的pid
为1
。
尝试在父进程中放置wait()
!!
答案 1 :(得分:1)
这是因为父进程在子进程运行之前退出,而子进程则是第一个进程的子进程。