2012-03-01 45 views
0

我正在執行一個處理SIGPIPE並通過管道輸出更多的進程。 當我按q更多的退出,但進程正在運行,因爲SIGPIPE處理。當管道故障錯誤時,CPU使用率增加

從按q的時間開始,CPU使用率增加,達到〜70%。

可能有人請告訴什麼是在CPU使用率增加背後的原因

+0

您是否使用過像gdb這樣的調試器,或者只是使用'strace'或'ltrace'來查找? – 2012-03-01 11:56:54

回答

1

這是可能的方案只是它的工作(忽略寫的返回值(2)),因爲如果它被稱爲與>/dev/null而不是更多。然而,它也有可能在SIGPIPE的接收中故意進入無限循環。沒有辦法告訴你是否不透露該程序是什麼。

道德故事:SIGPIPE正是爲了這個場景,一個像更多(或更少,最好是)的尋呼機退出,告訴輸出生成程序也退出,因爲沒有人會再讀。

+0

#!/ bin/bash flag = 0; trap「flag = 1」SIGPIPE while true; do if [$ flag -eq 0];然後 echo abcde fi #做其他東西 完成;上面的 – mandeep 2012-03-01 12:52:06

+0

是正在執行的小shell腳本:「./test.sh | more」,當q被按下時,CPU使用率開始增加。請看看你是否得到了一些東西 – mandeep 2012-03-01 12:54:50

+0

這顯然是一個編程錯誤,因爲你永遠不會離開循環。 – 2012-03-01 14:42:20