私はfork()のマニュアルページを読んで、「呼び出しプロセスで開かれているすべてのファイル記述子がコピーされました」のようなものです。
呼び出しプロセスがその時点で実行している実行可能バイナリのファイル記述子がそのステートメントに含まれているかどうかは100%明確ではありません。マニュアルページに「すべてのファイル記述子」と記載されていますが、open()
これを使用して2つのプロセスを同期するよりも、分岐されたプロセスに同じ実行可能バイナリを使用する方が簡単に見えるので、これを尋ねます。それでは、実際にもコピーされるとしたらなぜでしょうか?
ベストアンサー1
実行中のバイナリにはファイル記述子がなく、メモリマップのみがあります。
ls -l /proc/self/fd
(たとえば、Linuxの場合を参照してくださいcat /proc/self/maps
。)
もちろん、メモリマップは同じファイルを指しますが、共有ライブラリでも同じです。デフォルトのプログラムファイルの場合、実行中のプロセスで使用されている間、Linuxでは書き込みは許可されません。 (過去に確認しましたが、共有ライブラリでは機能しません。)