Bashが実行する組み込みのコマンドがどのようにシグナルを処理するかについて、次の説明を説明できますか?

Bashが実行する組み込みのコマンドがどのようにシグナルを処理するかについて、次の説明を説明できますか?

バッシュマニュアルから

Bashによって実行される非組み込みコマンドは、シグナルハンドラをシェルが親から継承した値に設定します。

ジョブ制御が無効になると、非同期コマンドはこれらの継承されたハンドラーに加えてSIGINTとSIGQUITを無視します。

コマンド置換の結果として実行されるコマンドは、キーボードから生成されたジョブ制御信号SIGTTIN、SIGTTOU、およびSIGTSTPを無視します。

上記の意味の例をいくつか挙げることができる人がいるかどうか疑問に思います。ありがとうございます。

関連ターミナルにctrl-cを入力したときにフォアグラウンドジョブが完了する前に終了しないのはなぜですか?

ベストアンサー1

stty tostop
echo bar >&2 & # no output from echo, just from shell job control
fg # now the output is produced
    bar
text=$(echo foo; echo bar >&2) # command substitution in foreground command
    bar
text=$(echo /etc/passwd; echo bar >&2) ; ls -l "$text" &
    bar
fg
    -rw-r--r-- 1 root root 2745 18. Feb 00:36 /etc/passwd

バックグラウンドコマンドの「正常」出力は遅延されますが、SIGTTOUバックグラウンドコマンド置換の出力はstderrすぐに表示されるためです。

外部コマンド

trap '' HUP
bash
sleep 1234 # PID 23456

他の殻に

kill -HUP 23456 # does not abort sleep

おすすめ記事