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

9
如果我编写了一个Perl脚本,将STDERR覆盖为STDOUT的副本,但是我从未恢复该文件句柄,在脚本执行结束时会发生什么?我找不到任何警告实际发生或不发生什么的信息。可能我有所误解,但感谢您的耐心。
1个回答

12

当一个进程退出时,内核会回收所有已使用的资源,包括所有文件描述符,这些描述符将被简单地关闭。如果有应用程序级别的缓冲区,则该缓冲区中的数据可能尚未写入内核,但在退出之前保持文件描述符打开没有风险。

如果你的Perl脚本通过使用exec启动另一个进程来结束,那么该进程将继承所有文件描述符(除了那些标记为关闭执行的描述符)。


2
此外,Perl通常会根据需要自动刷新其缓冲区,除非你做了一些愚蠢的事情,比如kill 9, $$。尽管在一些平台上似乎还存在一些小问题(参见这里)。 - Ilmari Karonen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接