如果你不在Perl中关闭文件句柄会发生什么?

bet*_*x64 9 perl stdout read-write stderr filehandler

如果我正在编写一个Perl脚本,用STDOUT的副本覆盖STDERR,但我从不恢复文件句柄,那么在脚本执行结束时会发生什么?我找不到任何警告实际发生或不发生的事情.

我可能被误导了,但感谢你的耐心等待.

Syl*_*sne 12

当进程退出时,内核将恢复所有使用的资源.这包括所有文件描述符,它们只是简单地关闭.如果存在应用程序级缓冲区,则该缓冲区中的数据可能尚未写入内核,但在退出之前不存在保持文件描述符打开的风险.

如果您的Perl脚本通过使用exec启动另一个进程而结束,则该进程将继承所有文件描述符(在exec上标记为close的那些文件描述符除外).

  • 另外,perl通常会根据需要自行刷新自己的缓冲区,除非你做一些愚蠢的事情,比如`kill 9,$$`.虽然在一些平台上似乎存在一些小问题[http://perldoc.perl.org/perlport.html#exec]. (2认同)