4

ウィキペディアがここで述べているように、「スポーン呼び出しが行われたときに開いているファイルは、子プロセスで開いたままになります」。( exec()に非常に似ています)

OK、OSはいくつかのファイルを開いたままにし、新しく生まれた無意識のプロセスの準備を整えました。プロセスが以前に開いたファイルを認識せず、最終的に終了することを決定したと仮定します。一方、C などのプログラミング言語では、終了前に内部プロセスのクリーンアップが必要です。

私の質問は、この種のクリーンアップは、開いているファイルに何らかの影響を与えますか? 私の知る限り、それらはプロセス自体のどこにも登録されていません。

答えは、spawn() されたプロセス (または exec() されたプロセス) を終了するときのプログラマーの動作を何らかの方法で定義する必要があります。完全なクリーンアップ手順は、何らかの形で親に害を及ぼす可能性がありますか? (たとえば、一時ファイルを削除することによって) したがって、プログラマーはexit( )の代わりに_exit()を使用すべきではありませんか?

4

1 に答える 1

3

短い答え:いいえ。C ランタイムは、プロセスの終了時に開いているファイル ハンドルを閉じないため、親プロセスまたは子プロセスを終了しても、他のプロセスを台無しにする心配はありません。

カーネルは、開いている参照がなくなると、ファイル ハンドルを閉じる責任があります。これは、カーネルがプロセスを破棄したときに発生します。そして、カーネルはこの状況を問題なく処理できます。

于 2011-04-08T12:38:01.300 に答える