由于某种原因,我不知道,我唯一的第一个execl语句是在以下代码中执行:
pid = fork();
if(pid < 0){
fprintf(stderr, "Fork Failed.\n");
exit(1);
return;
}else if(pid==0){
if(execl("/home/tropix/hw11-2","/home/tropix/hw11-2",semarg,pipe_to_p3,pipe_to_p4,(char*)0)){
fprintf(stderr, "File Exexecution of hw11-2 failed.\n");
exit(1);
}
if(execl("/home/tropix/hw11-3","/home/tropix/hw11-3",shmarg,semarg,pipe_from_p2,pipe_to_p5_1, (char*)0)){
fprintf(stderr, "File Execution of hw11-3 failed.\n");
exit(1);
}
if(execl("/home/tropix/hw11-4","/home/tropix/hw11-4",shmarg,semarg,pipe_from_p2_2,pipe_to_p5_2, (char*)0)){
fprintf(stderr, "File Execution of hw11-4 failed.\n");
exit(1);
}
if(execl("/home/tropix/hw11-5","/home/tropix/hw11-5",semarg,pipe_from_p3,pipe_from_p4,(char*)0)){
fprintf(stderr, "File Execution of hw11-5 failed.\n");
exit(1);
}
} else (...parent stuff...)
有没有人知道为什么会这样?
谢谢:)
答案 0 :(得分:3)
The exec family of functions shall replace the current process image with a new process image.
因此,在第一个execl
之后,第二个确实不存在。
答案 1 :(得分:2)
exec
系列函数通过将您的进程替换为您指定的进程来工作,因此如果成功,函数永远不会返回。
答案 2 :(得分:0)
正如其他答案所说,exec*
用新的替换当前过程映像,因此如果要生成多个子进程,则每fork()
需要exec*()
一次。