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

发布于 2024-11-06 00:12:08 字数 1076 浏览 1 评论 0原文

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

有人知道这是为什么吗?

谢谢 :)

For some reason that I am unaware of, my only my first execl statement is executing in the following code:

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...)

Does anyone have an idea as to why this is?

Thanks :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

蓝梦月影 2024-11-13 00:12:08

exec 系列函数的工作原理是用您指定的进程替换您的进程,因此如果函数成功,则永远不会返回。

The exec family of functions work by replacing your process with the one you specify, so the function never returns if it is successful.

傲影 2024-11-13 00:12:08

正如其他答案所说, exec* 将当前的进程映像替换为新的进程映像,因此您需要为每个 exec*()< 进行一次 fork() 一次/code> 如果你想产生几个子进程。

As the other answers say, exec* replace the current process image with a new one, so you need to fork() once for every exec*() if you want to spawn several children processes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文