2つのtrap
ハンドラを登録し、trap -p
で表示する単純なプログラムです。それは同じことをしますが、子供のバックグラウンドプロセスで行います。bash:バックグラウンドシェルでSIGINTのトラップを設定できないのはなぜですか?
なぜバックグラウンドプロセスはSIGINT
トラップを無視しますか?
#!/bin/bash
echo "Traps on startup:"
trap -p
echo ""
trap 'echo "Received INT"' INT
trap 'echo "Received TERM"' TERM
echo "Traps set on parent:"
trap -p
echo ""
(
echo "Child traps on startup:"
trap -p
echo ""
trap 'echo "Child received INT"' INT
trap 'echo "Child received TERM"' TERM
echo "Traps set on child:"
trap -p
echo ""
) &
child_pid=$!
wait $child_pid
出力:(彼らは上のset -m
をバックグラウンドにしている場合を除き)
$ ./show-traps.sh
Traps on startup:
Traps set on parent:
trap -- 'echo "Received INT"' SIGINT
trap -- 'echo "Received TERM"' SIGTERM
Child traps on startup:
Traps set on child:
trap -- 'echo "Child received TERM"' SIGTERM
'set -m'を少し拡張することができますか?それは何であり、どのようにすることができますか?私はbgプロセスにSIGINTを送ることができる回避策を探しています。どうも。 – drevicko
@revickoマンページの 'monitor'を検索します。監視モード( 'set -m')はコマンド(パイプライン)を別のプロセスグループで実行させます。あなたはそれを望んでいないかもしれません。しかし、バックグラウンドプロセスで実行可能ファイルを実行している場合は、SIGINTを元に戻すラッパーを使用して起動するのは簡単です(何もせずに)。 (もしあなたがそれをやる方法がわからないのであれば、その質問を投稿してください)、 – PSkocik
ありがとう!質問は[ここ](https://stackoverflow.com/questions/49178556/how-do-i-launch-a-background-process-through-a-wrapper-thatll-undo-the-siginti-i)です。 – drevicko