首页 文章

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

提问于
浏览
-1

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

我做了以下测试:

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

  • 然后我突然杀了服务器进程 .

  • 客户端流程已经死亡 . 但我没有看到任何日志显示“断管” .

我认为bash会报告死因 .

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

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

“程序收到信号SIGPIPE,Broken pipe . ”

1 回答

  • 2

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

相关问题