首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >supervisord停止子进程

supervisord停止子进程
EN

Stack Overflow用户
提问于 2012-02-01 12:11:58
回答 6查看 28.2K关注 0票数 61

我在使用supervisord时遇到的一个问题是,当我有一个命令,而这个命令又产生了另一个进程时,supervisord不能杀死它。

例如,我有一个java进程,它在正常运行时如下所示

代码语言:javascript
复制
 $ zkServer.sh start-foreground
 $ ps -eaf | grep zk
 user 30404 28280  0 09:21 pts/2    00:00:00 bash zkServer.sh start-foreground
 user 30413 30404 76 09:21 pts/2    00:00:10 java -Dzookeeper.something..something

supervisord配置文件如下所示:

代码语言:javascript
复制
[program:zookeeper]
command=zkServer.sh start-foreground
autorestart=true
stopsignal=KILL

这类有多个子进程的进程在从supervisorctl中阻止它们时,supervisord不能很好地处理它们。因此,当我从supervisord运行这个命令并试图从supervisorctl停止它时,只有顶级进程会被终止,而实际的java进程却不会。

EN

回答 6

Stack Overflow用户

发布于 2013-12-13 20:10:39

Rick Hanlon II在这里遇到了同样的问题:https://coderwall.com/p/4tcw7w

应该在程序部分设置stopasgroup=true选项,以便supervisord不仅停止父进程,而且停止子进程。

示例如下所示:

代码语言:javascript
复制
[program:some_django]
 command=python manage.py runserver
 directory=/dir/to/app
 stopasgroup=true

此外,请记住,您可能有一个不具有"stopasgroup“功能的较旧的supervisord包。我在Raspberry Pi上试用了这些Debian包:

  • supervisor_3.0a8 work.
  • supervisor_3.0b2-1未按预期工作。
票数 108
EN

Stack Overflow用户

发布于 2014-03-13 05:15:03

在supervisord调用的主bash脚本中执行以下操作,为我修复了这个问题:

代码语言:javascript
复制
trap "kill -- -$$" EXIT

这会在主脚本退出时杀死整个进程组,例如,当它被supervisord杀死时。

票数 13
EN

Stack Overflow用户

发布于 2012-02-02 03:18:11

最近向supervisord添加了一个功能,可以将SIGKILL发送到整个进程组。它是github版的,但还没有正式发布。

如果进程id在文件中可用,则可以使用pid-proxy program

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

https://stackoverflow.com/questions/9090683

复制
相关文章

相似问题

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