当进入子 shell 时,不被忽略的陷阱应设置为默认操作
来源:https ://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_28
显然,这对于我从 shell 调用的外部程序也是如此。trap "" SIGNAL
用于捕获(忽略)该信号。但trap action SIGNAL
不调用action
,不做任何事情,信号处理似乎设置为其原始默认值。
这种行为在哪里定义?
当进入子 shell 时,不被忽略的陷阱应设置为默认操作
来源:https ://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_28
显然,这对于我从 shell 调用的外部程序也是如此。trap "" SIGNAL
用于捕获(忽略)该信号。但trap action SIGNAL
不调用action
,不做任何事情,信号处理似乎设置为其原始默认值。
这种行为在哪里定义?
trap
signal()
是 shell 的内置函数,它提供了/ 的接口sigaction()
。在这方面,外部命令的行为与您更改信号处置的其他语言相同。当您通过
execve()
系统调用执行另一个命令时,进程的内存包括代码,因此包括信号处理程序的代码将被擦除以替换为新的可执行文件的代码,因此信号处理程序无法生存。POSIX 说
execve()
:trap '' NAL
设置SIG_IGN
信号和 的配置trap - NAL
SIG_DFL
。trap
有额外的要求(其中许多可以被视为限制,一些 shell 实现忽略):