簡體   English   中英

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

[英]Why the bash doesn't print the “Broken pipe” log after process dead?

我的客戶端將循環發送包到服務器。 客戶端程序沒有捕獲SIGPIPE。 (客戶端操作系統是ubuntu服務器12.04 LTS)

我做了以下測試:

  1. 3次握手完成后。 然后客戶端將一些包發送到服務器。 服務器可以正常收到包。

  2. 然后我突然殺了服務器進程。

  3. 客戶流程已經死了。 但我沒有看到任何日志顯示“斷管”。

我認為bash將報告死因。

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

但是我使用gdb啟動進程,重復上面的步驟。 進程死了,gdb顯示以下日志:

“程序收到信號SIGPIPE,Broken pipe。”

如果客戶端沒有捕獲SIGPIPE,那么它不可能打印錯誤消息! 形式為“Broken pipe”的消息由接收SIGPIPE的程序打印,以響應寫入錯誤或作為對信號的響應。 由於您的客戶端不處理SIGPIPE,因此它不會打印該錯誤消息,而只是終止。 當您在gdb中運行時,gdb會告訴您子進程因SIGPIPE而終止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM