straceで何かをキャプチャしてすぐに終了したいです。これにより、プログラムが生き続けることができますstrace ... program 2>&1 | grep --line-buffered ... | read line
。
strace自体が終了した後にstraceにプログラムを終了させる簡単な方法はありますか?
これが私が解決した方法です。
(strace ... program 2>&1 & echo $! >&3) 3>pid | grep --line-buffered ... | while read line; do
kill `<pid`
break
done
しかし、良く見えません。
修正する:
実際の問題は、私が追跡していたプログラムがSIGPIPEを無視していることでした。この問題を解決するきちんとした方法は、SIGPIPEを傍受し、SIGTERMを送信する追加のレイヤーを作成することです。
答え1
grepがサポートしている場合は、grep -m 1 ...
それを使用して一致するものを見つけて停止できます。書き込みを続けると仮定すると、パイプが閉じてストレスが終了します。