bashでSIGINTを傍受し、何かをしてから無視することは可能ですか(bashを実行し続けます)。
SIGINT を無視できることを知っています
trap '' SIGINT
そして、私は署名で何かをすることもできます
trap handler SIGINT
ただし、handler
実行後もスクリプトは停止します。例えば
#!/bin/bash
handler()
{
kill -s SIGINT $PID
}
program &
PID=$!
trap handler SIGINT
wait $PID
#do some other cleanup with results from program
ctrl+c を押すと、プログラムへの SIGINT が送信されますが、bash は、wait
プログラムが適切にシャットダウンされ、シグナル ハンドラーで出力が作成される前にスキップします。
@suspectus answer を使用して、次のように変更できますwait $PID
。
while kill -0 $PID > /dev/null 2>&1
do
wait $PID
done
これは実際に機能しますが、これが「クリーン」なのか「ダーティな回避策」なのか、100%確信が持てません。