为什么 bash 在进程死后不打印"Broken pipe"日志?



我的客户端将循环将包发送到服务器。 客户端程序不会捕获 SIGPIPE。(客户端操作系统是 Ubuntu 服务器 12.04 LTS)

我做以下测试:

  1. 3次握手完成后。然后客户端会将一些包发送到服务器。服务器可以正常接收包。

  2. 然后我突然杀死了服务器进程。

  3. 客户端进程已失效。但我没有看到任何日志显示"断管"。

我认为 bash 会报告死因。

为什么 bash 在进程死后不打印"断管"日志?

但是我使用 gdb 启动该过程,重复上面的步骤。 进程死了,gdb显示以下日志:

"程序接收到信号SIGPIPE,断管。"

如果客户端没有捕获 SIGPIPE,那么它就不可能打印错误消息! "断管"形式的消息由接收SIGPIPE的程序打印,以响应写入错误或作为对信号的响应。 由于客户端未处理 SIGPIPE,因此它不会打印该错误消息,而只是终止。 当您在 gdb 中运行时,gdb 会告诉您子进程由于 SIGPIPE 而终止。

相关内容

  • 没有找到相关文章

最新更新