我想写一个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
发布于 2009-06-10 15:27:56
乔的回答让我走上了正确的道路。我还发现我应该捕获更多的信号来覆盖我的基础。
最终的脚本如下所示:
#!/bin/sh
sleep 600 &
PID1="$!"
sleep 600 &
PID2="$!"
trap "kill $PID1 $PID2" exit INT TERM
wait发布于 2010-02-01 05:25:14
这对我来说很有效:
trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXITkill -- -$$向整个进程组发送一个descendants.set -e (更多详细信息here). )时也会终止SIGTERM信号EXIT是有用的
发布于 2009-06-10 15:26:03
我怀疑您的/bin/sh不是Bash (尽管您将问题标记为“Bash”)。
从消息来看我猜这是个破折号。如果您需要编写Bash代码,请查看它的手册或仅修复您的shebang。
https://stackoverflow.com/questions/976059
复制相似问题