Deb*_*ger 13 bash signals kill bash-trap
我想捕获从Script-A.sh发送到Script-B.sh的信号,所以在Script-A.sh中我使用命令
(将SIGINT发送到Script-B.sh)
kill -2 $ PID_Script-B.sh
在Script-B.sh中,我捕获信号并调用函数Clean
陷阱'清洁'2
它不起作用,而是立即杀死Script-B.sh而不执行Clean !!
我还注意到,如果我想将SIGINT从终端发送到任何捕获它的脚本,ctrl-c将会正确捕获,但如果我通过命令指定信号则不会kill -2 $pid_of_script
有没有想过发送SIGINT(ctrl-cVS kill -2 $pid_of_script)的两种方法之间的区别,以及如何将SIGINT从脚本发送到另一个?
问候,
调试器
Pau*_*ce. 13
我能够重现您报告的行为.我的假设是,由于脚本是从非交互式shell(作为脚本的子节点)运行的SIGINT,因此忽略了键盘信号.
来自info bash:
后台进程是进程组ID与终端进程不同的进程; 这些过程不受键盘生成的信号的影响.
我发现,如果你trap和kill使用其他信号,如SIGUSR1它的工作原理.
其他信息来自man bash:
由bash运行的非内置命令将信号处理程序设置为shell从其父级继承的值.当作业控制不起作用时,除了这些继承的处理程序之外,异步命令还会忽略SIGINT和SIGQUIT.
和
如果bash正在等待命令完成并收到已设置陷阱的信号,则在命令完成之前不会执行该陷阱.
和
SIGCHLD上的任何陷阱都会针对退出的每个子进行执行.