フォークは、呼び出されたプロセスのコピーを作成するために使用されます。これに続いて、通常、execファミリーの関数が呼び出されます。これ以外のフォークの使い方はありますか?私は1つを考えることができます。パイプ機能を使用してIPCを実行します。
5 に答える
はい、もちろん。プロセスを開始し、データの初期化を行ってから、複数のワーカーを生成することは非常に一般的です。それらはすべてアドレス空間に同じデータを持ち、それはコピーオンライトです。
もう 1 つの一般的な方法は、着信するすべての接続に対してメイン プロセスが TCP ソケットと fork() をリッスンするようにすることです。これにより、既存の接続を並行して処理しながら、新しい接続をすぐに処理できます。
fork() の後、両方のプロセスが fork() の前にプロセスに存在していたすべてのデータにアクセスできることを忘れていると思います。
fork のもう 1 つの用途は、親プロセスから切り離すことです (init のプロセス 1 にフォールバックします)。pid 1111 の bash などのプロセスが、pid 2222 を取得する myserver を起動すると、1111 が親になります。2222 の fork があり、子が pid 3333 を取得すると仮定します。ここでプロセス 2222 が終了すると、3333 はその親を失い、代わりに init を新しい親として取得します。
この戦略は、起動したプロセスと親関係を持たないようにするために、起動時にデーモンによって使用されることがあります。この回答も参照してください。
ある種のサーバーが着信接続をリッスンしている場合は、子プロセスをフォークして着信要求を処理できます(これには必ずしもexecやパイプが含まれるとは限りません)。
フォークの「使い方」は、フォーク爆弾を作成することです
私は小さなシェルを書きましたが、特にパイピング要素については、フォークでいっぱいでした (はい、これは exec ..)。パイプに関するウィキペディアのページ