我有这个脚本:
#!/bin/bash
set -e
#WHAT SHOULD I WRITE HERE?
sleep 60 # this is for testing
#java ... | logger # this is what will be in the real script
我希望能够通过向 myscript 发送 SIGTERM 来终止 myscript 及其所有子进程:
$ kill -s SIGTERM 5929
当我运行它时我看到ps fuxa
:
me 3640 0.0 0.1 108416 2100 pts/2 Ss 09:38 0:00 \_ /bin/bash
me 5929 0.0 0.0 106060 1348 pts/2 S+ 11:21 0:00 \_ /bin/bash myscript
me 5930 0.0 0.0 100908 604 pts/2 S+ 11:21 0:00 \_ sleep 60
我从找到的不同答案中尝试了许多陷阱线:
#trap 'echo hello' SIGHUP SIGINT SIGTERM EXIT
#trap 'kill $(jobs -p)' SIGHUP SIGINT SIGTERM EXIT
#trap "trap - SIGTERM && kill -- -$$" SIGHUP SIGINT SIGTERM EXIT
我使用第一个进行调试。我的经验是,我发送了 SIGTERM(甚至不止一个),但什么也没发生。当我按下 时Ctrl+C
,myscript 停止,并多次写入“hello”。因此,这证实了我发送 TERM 信号的方式是正确的,并且它被接收到了,但我仍然没有实现我的目标:立即停止 myscript。我用另外 2 条陷阱线得到了相同的结果。