我以前从未接受过这个;我正在做一个简单的程序:一个创建子进程的父进程,在它终止之后;这是代码
#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,如果我插入带有等待的注释行,程序运行正常;为什么这个?
答案 0 :(得分:0)
如果您查看屏幕截图中的最后一次运行,则会在终端提示已打印到屏幕后看到“进程8429正在终止”。
似乎正在发生的事情是你的“父亲”进程首先退出,然后你的shell输出提示符。然后,在最后一种情况下,子进程(PID 8429)打印其输出然后退出。
所以它终止了,但有时子进程不会终止,直到父进程退出并且你的shell进程已经打印出提示符。
当它这样做时再次点击“输入”,你应该看到一个正确的shell提示符。甚至输入命令,它应该正常运行。