您能否解释以下关于 Bash 启动的非内置命令如何处理信号的陈述?

您能否解释以下关于 Bash 启动的非内置命令如何处理信号的陈述?

来自 bash 手册

Bash 启动的非内置命令将信号处理程序设置为 shell 从其父级继承的值。

当作业控制无效时,除了这些继承的处理程序之外,异步命令还会忽略 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

相关内容