2012-03-01 12 views
0

私はSIGPIPEを処理しているプロセスを実行しており、より多くの出力をパイプしています。 qをもう一度押すとSIGPIPEが処理されるためプロセスが実行されています。パイプのエラーが壊れた場合のCPU使用率が増加します

qを押すとCPU使用率が上がり、〜70%に達します。

誰かがそれがで呼び出されたかのようにCPUの使用率

+0

'gdb'や単に' strace'やltrace'のようなデバッガを使いましたか? –

答えて

1

の増加の背後にある理由は、プログラムだけで(書き込み(2)の戻り値を無視して)その仕事をしている可能性があるされているもの教えてもらえます>/dev/nullよりもむしろ。しかし、SIGPIPEの受信時に意図的に無限ループに入る可能性もあります。プログラムが何であるかを明らかにしないかどうかを判断する方法はありません。

ストーリーのモラル:SIGPIPEは、より多くの(またはより少ない、好ましくは)より多くのページャが終了するように、より多くの人が読もうとしないため終了するようにページャーを終了することを意味します。

+0

#!/ bin/bash フラグ= 0; trap "flag = 1" SIGPIPE trueの場合、 do if [$ flag -eq 0];次に エコーabcde fi #do someother stuff done; – mandeep

+0

は、 "./test.sh | more"として実行されている小さなシェルスクリプトで、qを押すとCPU使用量が増加し始めます。あなたが何かを手に入れるかどうか確認してください。 – mandeep

+0

これは明らかにプログラミングのバグです。 –

関連する問題