我试图理解一些描述bash中信号处理的示例代码。在示例32-7中http://tldp.org/LDP/abs/html/debugging.html,作者的注释表明他正在捕获一个SIGINT,但该陷阱是用于EXIT。
{ trap "exit" SIGUSR1 sleep $interval; sleep $interval while true; do ... done; } & # Start a progress bar as a background process. pid=$! trap "echo !; kill -USR1 $pid; wait $pid" EXIT # To handle ^C.
为什么EXIT的陷阱会在SIGINT(Ctl-C)上向backgroud进程发送正确的信号(SIGUSR1)?
感谢任何帮助解释为什么这样做。
答案 0 :(得分:1)
EXIT
是trap
中针对bash的特殊处理程序,它不是信号。没有退出信号。只要bash进程终止,就会执行此陷阱。所以,这样做是为了确保如果用户杀死bash进程,SIGUSR1将被发送到后台进程,后者也被捕获,然后在该进程上执行'exit'。这可以确保如果您终止会话,后台进程不会永久存在但也会退出(这可能是评论试图解释的内容)。
编辑:我在原始回复中误解了这个问题
答案 1 :(得分:0)
EXIT
伪信号在正常退出和脚本被中断时被引发。