如果我编写了一个Perl脚本,将STDERR覆盖为STDOUT的副本,但是我从未恢复该文件句柄,在脚本执行结束时会发生什么?我找不到任何警告实际发生或不发生什么的信息。可能我有所误解,但感谢您的耐心。
当一个进程退出时,内核会回收所有已使用的资源,包括所有文件描述符,这些描述符将被简单地关闭。如果有应用程序级别的缓冲区,则该缓冲区中的数据可能尚未写入内核,但在退出之前保持文件描述符打开没有风险。
如果你的Perl脚本通过使用exec
启动另一个进程来结束,那么该进程将继承所有文件描述符(除了那些标记为关闭执行的描述符)。
kill 9, $$
。尽管在一些平台上似乎还存在一些小问题(参见这里)。 - Ilmari Karonen