2013-01-02 51 views
9

如果我正在編寫一個用STDOUT的重複覆蓋STDERR的Perl腳本,但我從不恢復該文件句柄,腳本執行結束時會發生什麼?我找不到任何警告事實上發生或不發生的事情。如果不關閉Perl中的文件句柄會發生什麼?

我可能會誤解,但感謝您的耐心等待。

回答

12

當進程退出時,內核恢復所有使用的資源。這包括所有的文件描述符,它們只是簡單的關閉。如果存在應用程序級別的緩衝區,那麼該緩衝區中的數據可能沒有寫入內核,否則在退出之前保持文件描述符處於打開狀態沒有風險。

如果您的Perl腳本以exec結束並啓動另一個進程,則該進程將繼承所有文件描述符(除了在exec上標記爲close的文件描述符)。

+2

此外,perl通常會根據需要照顧自己的緩衝區,除非你做了'kill 9,$$'這樣的傻事。儘管在幾個平臺上似乎存在一些小問題(http://perldoc.perl.org/perlport.html#exec)。 –

相關問題