Perl升级后的奇怪错误:无法刷新stdout

por*_*ton 1 perl warnings runtime-error

升级到Perl 5.24.4后,我们在日志中反复出现此错误(不指向文件名和行号):

无法冲洗标准输出:管道损坏

我们不知道导致此错误的原因.

有什么建议如何理解错误的原因?

mel*_*ene 5

错误来自perl.c,第595行:

        PerlIO_printf(PerlIO_stderr(), "Unable to flush stdout: %s",
                      Strerror(errno));
Run Code Online (Sandbox Code Playgroud)

这一行是其中的一部分perl_destruct,在程序结束时调用它来关闭perl解释器.

作为全局关闭过程的一部分,所有仍然打开的文件句柄都被刷新(即写出所有缓冲的输出).上面的评论说:

 /* Need to flush since END blocks can produce output */
 /* flush stdout separately, since we can identify it */
Run Code Online (Sandbox Code Playgroud)

错误消息未列出perldoc perldiag,这可能是文档错误.它可能被忽视了,因为它不是真实的warndie电话,它只是有效的print STDERR $message.它与文件名或行号无关,因为它只在程序停止运行后发生(即在调用之后exit或因为执行从主脚本结束时掉落).