如何编写一个陷阱SIGTERM的bash脚本,并立即杀死进程和所有subprocess

我有这个脚本:

#!/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。 其他两条陷阱线的结果是一样的。