我的主要内容中包含以下代码:
//testing with fork
printf("I am process: %d\n", getpid());
pid_t pid = fork();
printf("Now I am process: %d\n", getpid());
printf("fork returned %d\n", pid);
if(pid == 0){
printf("I am child %d\n", getpid());
}
然而我终端上的输出给了我这个: terminal output pic
我用一个' config_file.txt'的参数运行我的程序。正如你在第一行看到的那样,其余部分打印得很好,直到碰到叉子,我的cmd线出现在它之间...任何想法为什么是这样或我如何解决它?代码有问题吗?我只是按照一个简单的分叉教程。
编辑此外,运行后我的程序挂起,我必须按Enter键才能恢复我的cmd行。
答案 0 :(得分:1)
正在发生的事情是父进程在子进程之前完成。当父项完成时,会显示提示,但是由于子项仍在运行,因此它继续将输出打印到控制台。
如果您希望父母等到孩子完成,请使用wait()
功能:
printf("I am process: %d\n", getpid());
pid_t pid = fork();
printf("Now I am process: %d\n", getpid());
printf("fork returned %d\n", pid);
if(pid == 0){
printf("I am child %d\n", getpid());
} else {
wait(NULL);
}