
バッシュマニュアルから
Bashによって実行される非組み込みコマンドは、シグナルハンドラをシェルが親から継承した値に設定します。
ジョブ制御が無効になると、非同期コマンドはこれらの継承されたハンドラーに加えてSIGINTとSIGQUITを無視します。
コマンド置換の結果として実行されるコマンドは、キーボードから生成されたジョブ制御信号SIGTTIN、SIGTTOU、およびSIGTSTPを無視します。
上記の意味の例をいくつか挙げることができる人がいるかどうか疑問に思います。ありがとうございます。
答え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