2013-01-02 10 views
9

STDERRをSTDOUTの複製で上書きするPerlスクリプトを作成していますが、ファイルハンドルを復元しない場合は、スクリプトの実行終了時にどうなりますか?私は実際に何が起きているのか起こっていないのかを警告するものは見つけられません。Perlでファイルハンドルを閉じないとどうなりますか?

私はおそらく間違っていると思いますが、ご迷惑をおかけして申し訳ありません。

答えて

12

プロセスが終了すると、カーネルはすべての使用済みリソースを回復します。これには、単に閉じられているすべてのファイル記述子が含まれます。アプリケーションレベルのバッファがある場合、そのバッファのデータはカーネルに書き込まれていない可能性がありますが、終了する前にファイル記述子を開いたままにするリスクはありません。

execを使用してPerlスクリプトが終了し、別のプロセスを起動すると、そのプロセスはすべてのファイル記述子を継承します(execで閉じるとマークされたものを除く)。

+2

また、 'kill 9、$$'のような愚かなことをしない限り、perlは通常は必要に応じて自身のバッファをフラッシュします。いくつかのプラットフォームでは、いくつかマイナーな問題が残っているように見えますが(http://perldoc.perl.org/perlport.html#exec) –

関連する問題