#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid;
pid = fork();
printf("pid : %d\n", getpid());
if( pid == 0)
{
printf("child: pid : %d \n", getpid());
while(1);
}
else
{
printf("parent: pid : %d \n", getpid());
//while(1);
}
}
在if
语句中的上述代码段中,如果我们放while(1)
,它就不会被阻止,当输入键被按下时,程序退出,但如果是父母,我们把while(1)
,父母一直被阻止,直到我们给出ctrl + c。请澄清孩子的这种行为。
答案 0 :(得分:0)
在上面的if语句中的代码片段如果我们放入while(1),它不会被阻止
子进程实际上没有退出;它只是变成orphan process,因为它的父节点退出。孤立的chuld进程将由系统的init进程采用。您可以通过ps
命令查看它。
但是如果你将while(1);
放在父进程中,它仍会被阻止。
基本上无论哪个进程有while(1);
无限循环,它仍然在运行。当父母退出时,你会得到提示,孩子就会变成孤儿。但是子进程仍在运行。
通常,您需要wait(2)
父进程中的子进程才能获得子进程。