0

我正在尝试使用 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()s 必须处于某种循环中,但我的困惑在于如何以正确的方式循环和等待;到目前为止,我最好的想法是:

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() 以有序的方式,我将不胜感激!我认为我的困惑在于跟踪关于图表的哪个过程..有什么帮助吗?

4

0 回答 0