来自 bash 手册
Bash 启动的非内置命令将信号处理程序设置为 shell 从其父级继承的值。
当作业控制无效时,除了这些继承的处理程序之外,异步命令还会忽略 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