0

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

我做以下测试:

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

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

  3. 客户端进程已死。但我没有看到任何日志显示“断管”。

我认为 bash 会报告死因。

为什么 bash 在 process dead 后不打印“Broken pipe”日志?

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

“程序收到信号 SIGPIPE,管道损坏。”

4

1 回答 1

2

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

于 2012-11-16T01:33:40.827 回答