サブプロセスを呼び出して、それとそのすべての子孫に割り込みが送信されるようにする方法はありますか? 実行時間の長い子を呼び出すランチャー スクリプトを強制終了しようとしています。私は試しましたkill -SIGINT $child
(これはその子孫に割り込みを送信しないため、ノーオペレーションです)およびkill -SIGINT -$child
(インタラクティブに呼び出された場合は機能しますが、スクリプトで実行された場合は機能しません)。
これがテストスクリプトです。長時間実行スクリプトはtest.sh --child
. をtest.sh --parent
呼び出すと、呼び出されてから、それを強制終了test.sh --child &
しようとします。親に子をうまく殺させるにはどうすればよいですか?
#!/bin/bash
if [ "$1" = "--child" ]; then
sleep 1000
elif [ "$1" = "--parent" ]; then
"$0" --child &
for child in $(jobs -p); do
echo kill -SIGINT "-$child" && kill -SIGINT "-$child"
done
wait $(jobs -p)
else
echo "Must be invoked with --child or --parent."
fi
trap
長時間実行されている子をシグナルに変更し、それらをサブプロセスに送信してから待機
できることは知っています( Bash スクリプトから Ctrl+C でバックグラウンド (孫) の子を殺します) が、子スクリプトを変更せずに方法はありますか?