我正在尝试使用fork和exec逐级执行节点的有向图 - 即如果节点1和节点2都是节点0的子节点,则它们必须等待0才能在执行之前完成,因为它们依赖于节点0执行的输出;如果节点4是2和3的子节点,它必须等待2和3完成,依此类推。我的节点结构定义如下:
#define MAX_LEN 1024
#define MAX_CHILD_NBR 10
#define MAX_NODE_NBR 50
typedef struct node {
int id;
char program[MAX_LEN];
char prog_input[MAX_LEN];
char prog_output[MAX_LEN];
int child_list[MAX_CHILD_NBR];
int child_nbr;
int status; //0-ineligible; 1-ready; 2-running; 3-finished
pid_t pid;
} node_t;
我不确定如何使用fork和exec以正确的顺序执行这些程序,并且想知道是否有人可以帮助我了解如何执行此操作的总体大纲/结构?
我认为fork()必须处于某种循环中,但我的困惑在于如何以正确的方式循环和等待;到目前为止,我最好的想法是:
void executeGraph(struct node_t* headNode) {
int i;
for (i=0; i < headNode->child_nbr; i++) {
int pid = fork();
if (pid == 0) {
//this is the parent proc, but what should I do with it?
}
elseif (pid > 0) {
//this is the "child" proc, but how should I continue from here?
}
...
}
我觉得这个想法不正确(或者至少缺少一些东西),但我不知道如何迭代这样的图表,所以如果有人可以提供任何意见或建议如何去做或者如何以有序的方式fork(),我将非常感激!我认为我的困惑在于跟踪哪个过程与图形有关...有什么帮助?