2010-01-25 59 views
5

我使用系統調用命令從C++執行bash腳本時遇到問題。 該腳本獲取SIGPIPE信號並退出並返回代碼141是否推薦在bash腳本中捕獲SIGPIPE?

此問題已在我的代碼的最後一個版本中開始出現。

我的問題如下:

  1. 爲什麼現在這個SIGPIPE發生之前沒有發生?
  2. 忽略SIGPIPE是否安全以及後果如何?
+0

你可以發佈一些相關的代碼片段嗎? – tur1ng 2010-01-25 09:34:42

+0

正如答案中所解釋的那樣,某個地方存在破損的管道,因此存在「SIPIPE」信號。這意味着在你使用的邏輯中有什麼錯誤。你不應該忽視它。 – 2012-06-13 16:59:05

回答

3

1)如果不知道你改變了什麼,這很難回答。
2)如果一個命令序列出現在流水線中,並且其中一個讀命令在寫入器完成之前完成,那麼寫器會收到一個SIGPIPE信號。所以,你是否可以忽略它取決於你的腳本是否是可接受的行爲。更多信息here

2

一個current version of the FAQPiedPiper掛狀態:

隨着慶典-3.1,bash的默認情況下不報告SIGPIPE錯誤。您可以構建一個將報告此類錯誤的bash版本。

是否有可能您更改了Bash版本或其構建方式並導致您的代碼中的行爲發生變化?