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() を順序立てて使用していただければ幸いです。私の混乱は、グラフに関してどのプロセスがどれであるかを追跡することにあると思います..何か助けはありますか?