fork:子进程不会处于无限循环中

时间:2017-12-08 09:37:05

标签: c linux fork

#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。请澄清孩子的这种行为。

1 个答案:

答案 0 :(得分:0)

  

在上面的if语句中的代码片段如果我们放入while(1),它不会被阻止

子进程实际上没有退出;它只是变成orphan process,因为它的父节点退出。孤立的chuld进程将由系统的init进程采用。您可以通过ps命令查看它。

但是如果你将while(1);放在父进程中,它仍会被阻止。

基本上无论哪个进程有while(1);无限循环,它仍然在运行。当父母退出时,你会得到提示,孩子就会变成孤儿。但是子进程仍在运行。

通常,您需要wait(2)父进程中的子进程才能获得子进程。