0

1 つのマスター プロセスから複数のプロセスを作成したい。exec ファミリの関数を使用したいのはわかっていますが、意図したとおりに実行されていないようです。exec() はブロッキング呼び出しのようです。または、間違って使用しているだけかもしれません。とにかく、コードに:

const char* ROUTERLOCATION = "../../router";
int main(int argc, char** argv) {
  manager manager;
  vector<string> instructions = manager.readFile(argv[1]);
  ...
  //file gives me the number of proceses i want to spawn and that value goes in 
  //rCount
  for(int i = 0; i < rCount; i++){
    cout << "creating:" << i << endl;
    execl(ROUTERLOCATION, "",NULL);
    }
}

私が見る出力は次のとおりです。

creating:0
HI!!!

そして、すべてが優雅に終了します。を使用して複数のプロセスを生成することはできませんexecl()か?

また、これらの各プロセスと通信したいので、これらのプロセスの実行中にブロックされたくありません。

4

2 に答える 2

2

forkマスター プロセスで、子プロセスで を呼び出す必要がありますexecl。(exec関数のファミリーは、現在のプロセス イメージを新しいプロセスに置き換えるため、 for ループが完了しない理由です。)

于 2012-10-26T02:52:38.333 に答える
1

呼び出しexec()は、現在のプログラムが存在しないことを意味します。を使用して新しいプロセスを作成しfork()、それを呼び出しexec()exec()、新しいプロセスを置き換え、メイン プロセスが意図したとおりに動作するようにすることができます。

例:

pid_t pid = fork();
if (pid == 0) {// child
    execl();
} else { // parent
}
于 2012-10-26T03:04:41.447 に答える