信号(SIGNALS)

如果 bash 是交互的,没有设定任何陷阱,它忽略 SIGTERM (这样 kill 0 不会杀掉交互的 shell)。 SIGINT 被捕获并处理 (从而使内建命令 wait 可以中断)。在所有情况下, bash 忽略 SIGQUIT。 如果正在使用作业控制, bash 忽略 SIGTTIN, SIGTTOU, 和 SIGTSTP.

bash 开始的并行作业的信号处理句柄都设置为 shell 从父进程中继承 的值。如果不是正在使用作业控制,异步命令还忽略 SIGINTSIGQUIT 。 作为命令替换结果运行的命令忽略键盘产生的作业控制信号 SIGTTIN, SIGTTOU, 和 SIGTSTP.

如果收到信号 SIGHUP, shell 默认退出。在退出前,交互的 shell 向所有作业,运行的或停止的,发送 SIGHUP 信号。shell 向停止的作业发出 SIGCONT 信号来保证它们会收到 SIGHUP. 要阻止 shell 向特定的作业发送信号,应当使用内建命令 disown 将作业从作业表中删除 (参见下面的 shell 内建命令(SHELL BUILTIN COMMANDS) 章节) 或者使用 disown -h 来标记为不接受 SIGHUP。

如果使用 shopt 设置了 shell 选项 huponexit, 在交互的登录 shell 退出时 bash 向所有作业发出 SIGHUP 信号。

bash 等待命令执行结束时,如果收到已设置了陷阱的信号,陷阱 (trap) 将不会执行,直到命令结束。 当 bash 通过内建命令 wait 等待异步命令时,如果收到已设置 了陷阱的信号,将使得内建命令 wait 立即以大于 128 的状态值返回。 接着,陷阱将立即被执行。