在C中创建两个子进程并一个接一个地执行它们

时间:2014-01-31 21:59:52

标签: c linux fork child-process

我有两个程序,比如program_A和program_B,它们将从我的C代码中调用。 program_B必须仅在program_A完成其工作后执行。

我尝试使用fork()和execl()来实现我的目标,但似乎program_B根本不会被执行..任何人都能给我正确的结构,我应该以什么顺序创建我的子进程?

1 个答案:

答案 0 :(得分:3)

您需要wait才能完成第一个孩子,然后forkexecl下一个孩子。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void die(char *msg) {
    fprintf(stderr, "Error: %s\n", msg);
    exit(EXIT_FAILURE);
}

int main(void) {
    pid_t pid = fork();
    if (pid < 0)
        die("fork A");

    if (pid == 0) { // child
        execl("./program_A", "program_A", (char*)0);
        die("exec A");
    } else {        // parent
        wait(NULL);
        pid = fork();
        if (pid < 0)
            die("fork B");
        if (pid == 0) { // child
            execl("./program_B", "program_B", (char*)0);
            die("exec B");
        } else {        // parent
            wait(NULL);
            printf("Done.\n");
        }
    }

    return 0;
}