我想编写一个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

上面的脚本以trap: 10: SIGTERM: bad trap失败。

编辑:我正在使用Ubuntu 9.04

最佳答案

这对我有用:

trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT
  • kill -- -$$SIGTERM发送到整个进程组,因此也杀死了后代。
  • 在使用EXIT时,指定信号set -e很有用(更多详细信息here)。
  • 关于bash - shell脚本以生成进程,并终止SIGTERM上的子级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/976059/

    10-13 05:14