首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于在SIGTERM上产生进程、终止子进程的shell脚本

用于在SIGTERM上产生进程、终止子进程的shell脚本
EN

Stack Overflow用户
提问于 2009-06-10 14:48:55
回答 4查看 20.4K关注 0票数 9

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

基本上,我想要一个“主进程”。

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

代码语言:javascript
运行
复制
#!/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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-10 15:27:56

乔的回答让我走上了正确的道路。我还发现我应该捕获更多的信号来覆盖我的基础。

最终的脚本如下所示:

代码语言:javascript
运行
复制
#!/bin/sh

sleep 600 &
PID1="$!"

sleep 600 &
PID2="$!"

trap "kill $PID1 $PID2" exit INT TERM

wait
票数 5
EN

Stack Overflow用户

发布于 2010-02-01 05:25:14

这对我来说很有效:

代码语言:javascript
运行
复制
trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT

  • kill -- -$$向整个进程组发送一个descendants.
  • Specifying,因此在使用set -e (更多详细信息here).

)时也会终止SIGTERM信号EXIT是有用的

票数 13
EN

Stack Overflow用户

发布于 2009-06-10 15:26:03

我怀疑您的/bin/sh不是Bash (尽管您将问题标记为“Bash”)。

从消息来看我猜这是个破折号。如果您需要编写Bash代码,请查看它的手册或仅修复您的shebang。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/976059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档