execl只在分叉进程中执行一次,C编程

时间:2011-05-08 23:03:17

标签: c exec fork

由于某种原因,我不知道,我唯一的第一个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...)

有没有人知道为什么会这样?

谢谢:)

3 个答案:

答案 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*()一次。