#include<stdio.h>
#include<sys/wait.h>
#include<unistd.h>
#include<stdlib.h>
int main( int argc, char *argv[] ) {
printf("Hello, to the Simulation world,\n");
int pid = fork();
if(pid < 0) {
fprintf(stderr,"Oops something went wrong\n");
}else if (pid == 0){
printf("I'm child, and I do all the work, \n");
printf("This isn't printed");
// Any printf statement over here isn't executed \\
execvp(argv[1], argv);
} else {
wait(&pid);
printf("I'm Parent and I do nothing, but I will wait till my child dies.\n");
}
return 0;
}
如果没有显示printf语句,则在else下面的任何printf语句
使用的编译器:gcc版本6.3.1 20170306(GCC)
操作系统:基于Linux,
我的假设:stderr正在用自己的数据替换当前行输出,但只要输入在它自己的行中,如printf("This Line is Printed\n")
,我就能看到输出。但如果我以这种方式写printf("This Line isn't Printed")
。
或
它只发生在我身上吗?或者OS的一些渲染问题。
上述程序的输出:
答案 0 :(得分:0)
尝试在fflush(NULL);
execvp(argv[1], argv);
来自man fflush:
对于输出流,fflush()强制写入所有用户空间 通过流缓冲给定输出或更新流的数据 底层写功能。