Fork(),一个进程不会终止?

时间:2017-07-23 15:46:18

标签: process fork wait

我以前从未接受过这个;我正在做一个简单的程序:一个创建子进程的父进程,在它终止之后;这是代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>



int child(pid_t pid)
{
    printf("process %d is terminating\n",pid);
    exit(EXIT_SUCCESS);
}

int main()
{
    int i;
    for(i = 0; i < 2; i++){
        if(fork() == 0)
            child(getpid());
    }
    printf("father, pid=%d terminated\n",getpid());
    /*if(wait(NULL) == -1)
        perror("wait");*/
    exit(EXIT_SUCCESS);
}

当我跑步时,所有进程都打印出来,但是我认为父亲但是我不确定,因为终端处于活动状态(不会出现$),所以我终止了一个进程; insted,如果我插入带有等待的注释行,程序运行正常;为什么这个?

terminal output

1 个答案:

答案 0 :(得分:0)

如果您查看屏幕截图中的最后一次运行,则会在终端提示已打印到屏幕后看到“进程8429正在终止”

似乎正在发生的事情是你的“父亲”进程首先退出,然后你的shell输出提示符。然后,在最后一种情况下,子进程(PID 8429)打印其输出然后退出。

所以它终止了,但有时子进程不会终止,直到父进程退出并且你的shell进程已经打印出提示符。

当它这样做时再次点击“输入”,你应该看到一个正确的shell提示符。甚至输入命令,它应该正常运行。