这是一个脚本,名称是test.sh
#!/bin/bash
cleanup(){
echo "Caught SIGINT ..."
exit 1
}
trap 'cleanup' 3
while :;do
echo "a"
sleep 3
done
如果我直接在linux bash中运行nohup ./test.sh &
,它可以捕获kill -3 PID信号,
但如果我在一个名为go.sh的脚本文件中写nohup ./test.sh &
,并且我运行go.sh,那么test.sh无法捕获kill -3 PID信号
如何编写go.sh脚本以确保test.sh捕获-3信号?
kill -3
(SIGQUIT
)无法运作。根据bash的手册:
当bash是交互式的时候,在没有任何陷阱的情况下,它会忽略
SIGTERM
(这样kill 0
不会杀死交互式shell),并且SIGINT
被捕获并处理(以便等待内置是可中断的)。在所有情况下,bash都会忽略SIGQUIT
。如果作业控制生效,bash会忽略SIGTTIN
,SIGTTOU
和SIGTSTP
。