5

親で fork() を実行して子プロセスを作成すると、子は fork から継承された fd を閉じます。

それらは独立しているため、ファイルは親で開いたままになりますか? 標準入出力または stderr はどうですか?

4

1 に答える 1

5

ファイル記述子がファイルまたはデバイスを表しているかどうかに関係なく、また、それが標準の i/o 記述子として任意のプロセスに渡されたかどうかに関係なく、1 つのプロセスでファイル記述子を閉じても、他のプロセスにはまだ有効な記述子があります。

(これは非常に自然なことです。ディスクリプタが他のプロセスのディスクリプタと相互依存することを想像してみてください。その後、子プロセスが予期せずクラッシュした場合、クラッシュが検出されると、親プロセスはこの事実をログに記録することさえ困難になります。 . すべての形式のプロセス終了には、開いているすべての記述子を閉じる必要があるため、以前に開いた記述子を介して事実をログに記録できませんでした. したがって、障害モードはプロセス全体に広がる傾向があります. さらに、そのようなプロセスを介した通常のエラーのない I/O パターンでさえ、仮想的な共有記述子は、競合状態で大量に発生します。)

于 2012-04-17T20:42:04.307 に答える