C fork()导致非确定性行为:子进程不';不执行
我有一个非常简单的C fork()导致非确定性行为:子进程不';不执行,c,unix,gcc,C,Unix,Gcc,我有一个非常简单的c程序: #包括 #包括 int main(int argc,char*argv[]){ int rc=fork(); if(rc
c
程序:
#包括
#包括
int main(int argc,char*argv[]){
int rc=fork();
if(rc<0){
//fork失败了
fprintf(stderr,“fork失败\n”);
}else if(rc==0){
printf(“嗨,我是孩子!%d\n”,(int)getpid());
fflush(stdout);
}否则{
printf(“嗨,我是%d\n”,rc)的父母;
fflush(stdout);
}
返回0;
}
由于某种原因,当我编译和运行这个程序时,有时两个print语句都会显示,但有时只有父进程会显示
为什么会这样?即使我不使用wait()
,这两个进程仍然应该运行
使用gcc 7.5.0 ubuntu 18.04是因为当父进程关闭时IDE停止侦听,或者shell将子进程留在后台 要查看任意printf顺序,请执行以下操作:
int status;
printf("hi, I'm the parent of %d\n", rc);
fflush(stdout);
waitpid(pid, &status, 0);
我看你的代码没有问题。你是如何运行这个程序的?如果这有什么区别的话,我正在使用Clion IDE。它不应该有什么区别。你是如何运行代码的?通过IDE?试着在终端内运行它,看看是否有任何变化。您正在运行一个过时的程序,或者遇到一些非常奇怪的编译器问题。