我有两个程序,比如program_A和program_B,它们将从我的C代码中调用。 program_B必须仅在program_A完成其工作后执行。
我尝试使用fork()和execl()来实现我的目标,但似乎program_B根本不会被执行..任何人都能给我正确的结构,我应该以什么顺序创建我的子进程?
答案 0 :(得分:3)
您需要wait
才能完成第一个孩子,然后fork
和execl
下一个孩子。
#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;
}