用于生成进程的shell脚本,在SIGTERM上终止子进程

its*_*dok 7 bash scripting sh long-running-processes sigterm

我想编写一个shell脚本,在后台生成几个长时间运行的进程,然后挂起.收到SIGTERM后,我希望所有子进程也终止.

基本上,我想要一个"主过程".

这是我到目前为止所得到的:

#!/bin/sh

sleep 600 &
PID1="$!"

sleep 600 &
PID2="$!"

# supposedly this should kill the child processes on SIGTERM. 
trap "kill $PID1 $PID2" SIGTERM 

wait
Run Code Online (Sandbox Code Playgroud)

上面的脚本失败了trap: 10: SIGTERM: bad trap.

编辑:我正在使用Ubuntu 9.04

tok*_*and 12

这对我有用:

trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT
Run Code Online (Sandbox Code Playgroud)
  • kill -- -$$SIGTERM发送到整个进程组,从而杀死后代.

  • EXIT使用时指定信号很有用set -e(这里有更多细节).


its*_*dok 5

乔的回答让我走上正轨.我还发现我应该捕获更多的信号来覆盖我的基地.

最终脚本如下所示:

#!/bin/sh

sleep 600 &
PID1="$!"

sleep 600 &
PID2="$!"

trap "kill $PID1 $PID2" exit INT TERM

wait
Run Code Online (Sandbox Code Playgroud)