这是一个脚本,名称是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信号?
答案 0 :(得分:1)
kill -3
(SIGQUIT
)不起作用。根据bash的手册:
当bash是交互式的时候,在没有任何陷阱的情况下,它会忽略
SIGTERM
(这样kill 0
不会杀死交互式shell),并且SIGINT
被捕获并处理(所以等待内置是可中断的)。 在所有情况下,bash都会忽略SIGQUIT
。如果作业控制生效,bash会忽略SIGTTIN
,SIGTTOU
和SIGTSTP
。