所以,我要做的是创建一个子进程,让它执行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任务或其他什么。提前谢谢!
答案 0 :(得分:3)
wait()
的参数不是PID。它是一个指向int
的指针,其中将存储退出状态。你传递的是一个需要指针的整数,这意味着:
wait
,程序可能会崩溃或损坏一些不相关的内存位置。在那之后它的行为是不可预测的。答案 1 :(得分:0)
虽然Cat进程可能已经完成,但磁盘缓存可能仍然保留结果...而不是等待cat完成,直到文件上的锁被释放为止。