トラップを使用して子プロセスにシグナルを転送することについて混乱しています。2 つのスクリプトがあるとします。
灰
#!/bin/bash
# print the process id
echo $$
cleanup() {
rv=$?
echo "cleaning up $rv"
exit
}
sleep 5
trap '' SIGTERM # trap cleanup SIGTERM
echo 'cant stop wont stop'
./b.sh
echo 'can stop will stop'
trap - SIGTERM
sleep 4
echo 'done'
b.sh
#!/bin/bash
sleep 4;
echo 'b done'
を実行a.sh
して別のウィンドウからプロセス グループを強制終了するとkill -- -PGID
、SIGTERM は無視され、に渡されませんb.sh
。しかしtrap cleanup SIGTERM
、そうすると、SIGTERM は通過して終了しますb.sh
。トラップが信号を渡す場合と渡さない場合があるのはなぜですか?