子/バックグラウンドプロセスで実行しているときにシグナルをトラップできません。
これが私の簡単なbashスクリプトです:
#!/bin/bash
echo "in child"
trap "got_signal" SIGINT
function got_signal {
echo "trapped"
exit 0
}
while [ true ]; do
sleep 2
done
これを実行し、後で実行する場合
kill -SIGINT (pid)
すべてが期待どおりに機能し、印刷trapped
して終了します。
ここで、次のような親スクリプトから同じスクリプトを開始すると、次のようになります。
#!/bin/bash
echo "starting the child"
./child.sh &
その後、子供はもう信号をトラップしません....?
SIGINTの代わりにSIGTERMを使用するように変更した後、正しく機能しているようです...?