我想捕获CtrL + c和CtrL + \,然后将下面的cmd添加到我的脚本中:
trap _trapException SIGINT SIGQUIT
function _trapException(){
echo "The job is canceled!"
exit
}
但是,这可以捕获CtrL + \但不能捕获CtrL + c, 我删除了SIGQUIT,它仍然没有捕获CtrL + c。
否则,我同时在我的脚本中使用了tee函数。
答案 0 :(得分:0)
您的处理程序函数和陷阱调用很好。第一次引发SIGINT
或SIGQUIT
时,将调用该函数。但是,在信号处理程序中,您还调用exit
。这意味着它会杀死这个过程。
尝试从exit
功能中删除_trapException
来电。
答案 1 :(得分:0)
@Blue Moon当我重写一个演示代码来重现它时,我发现了导致问题的原因。演示如下: test.sh
#!/bin/sh
#encoding:UTF-8
trap _trapException SIGINT SIGQUIT
function _trapException(){
echo "INFO: The job is canceled!"
exit 1
}
sh trap_test.sh | tee -a test.log
虽然trap_test.sh也有陷阱功能,但功能如下:
#!/bin/shell
trap test SIGINT SIGQUIT
function test(){
echo "trap test!"
exit 1
}
while true
do
echo "test"
sleep 10
done
当我运行sh test.sh,然后陷阱CtrL + c失败,但是陷阱Ctrl + \ success; 当我删除trap_test.sh中的陷阱代码时,它可以在运行sh test.sh时捕获这两个信号。
深层原因还不得而知?