1

再帰的に使用する必要fork()がありますが、フォークされたプロセス (子と子孫を含む) の数を (たとえば) 100 に制限します。次のコード スニペットを考慮します。

void recursive(int n) {
    for(int i=0; i<n; i++) {
        if(number_of_processes() < 100) {
            if(fork() == 0) {
                 number_of_processes_minus_one();
                 recursive(i);
                 exit(0);
            }
        }
        else
            recursive(i);
     }
}

実装方法number_of_processes()number_of_processes_minus_one()? IPC使用する必要がありますか? ファイルを事前に作成し、書き込みPROC_MAX、ロック、読み取り、書き込み、ロック解除を試みましたnumber_of_processes()が、それでもすべての pid が使用されます。

4

1 に答える 1

1

一番簡単なのはパイプを使うことだと思います。何かを fork する前にパイプを作成し、書き込み側に 100 バイトを書き込み、書き込み側を閉じます。次に、フォークするときはいつでも、パイプから 1 バイトを読み取るようにしてください。バイトを読み取ることができる場合は、フォークします。そうでない場合は、しないでください。子がフォークを許可されている場合、グローバル変数を使用してフォークの合計数を追跡しようとすると失敗しますが、パイプはすべての子孫にわたって持続します。

于 2012-12-10T21:27:31.970 に答える