我有这个脚本:
#!/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和所有它的subprocess:
$ 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
我用第一个debugging。 我所经历的是,我发送了SIGTERM(甚至多于一个),没有任何反应。 当我按下Ctrl+C ,myscript停止,并且写入“hello”次数。 因此,这证实了我发送TERM信号的方式是正确的,并且已经被接收,但是我仍然没有达到我的目标:立即停止myscript。 其他两条陷阱线的结果是一样的。