为什么我的父进程没有等待第二次? C / Unix的

时间:2014-11-12 23:28:43

标签: c unix

所以,我要做的是创建一个子进程,让它执行execl并运行ls。然后在ls完成后,创建另一个子进程并让它在文件上运行cat命令。第二个等待(pid)似乎不等待第二个子进程在完成之前完成。这是我的代码和输出

#include <fcntl.h>

int main(){
int pid;
printf("In parent process, creating child now...\n");
pid = fork();
if (pid==0){
 printf("Now in child process...\n");
 execl("/bin/ls","ls","-l",(char*)0);
}
wait(pid);
printf("ls child process complete\n");
printf("in parent process\n");
printf("Creating another child process\n");
pid=fork();
if(pid==0){
  execl("/bin/cat","cat","f1",(char*)0);
}
wait(pid);
return 0;

}

这是我的输出

In parent process, creating child now...
Now in child process...
"Contents of ls"
ls child process complete
in parent process
creating another child process
[username@host ~]$ "Contents of file" *cursor*

父进程似乎在第二个子进程完成之前完成。一次只有一个孩子。 “文件内容”应该出现在[username @ host~] $提示符之前。我想我错了等待或错误的pid任务或其他什么。提前谢谢!

2 个答案:

答案 0 :(得分:3)

wait()的参数不是PID。它是一个指向int的指针,其中将存储退出状态。你传递的是一个需要指针的整数,这意味着:

  1. 一旦拨打wait,程序可能会崩溃或损坏一些不相关的内存位置。在那之后它的行为是不可预测的。
  2. 您需要启用更多编译器警告并注意它们。

答案 1 :(得分:0)

虽然Cat进程可能已经完成,但磁盘缓存可能仍然保留结果...而不是等待cat完成,直到文件上的锁被释放为止。