首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用-9或-15杀死Upstart服务器,但子进程仍处于活动状态。

使用-9或-15杀死Upstart服务器,但子进程仍处于活动状态。
EN

Stack Overflow用户
提问于 2017-07-17 12:33:54
回答 1查看 124关注 0票数 0

Upstart服务负责创建一个gearman工作人员,它在gnu并行的帮助下以cpus的数量并行运行。要理解这个问题,您可以阅读我的堆栈溢出帖子,其中描述了如何并行运行工作人员。

叉进程不确定地使用gnu并行来捕获单个退出错误和重生。

Upstart服务: workon.conf

代码语言:javascript
复制
# workon

description "worker load"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

script
  exec seq 1000000 | parallel -N0 --joblog out.log ./worker
end script

好吧。所以上面的服务就开始了。

代码语言:javascript
复制
$ sudo service workon start
workon start/running, process 4620

4620是服务工作的进程标识。

4名工作人员将按cpu内核生成。例如。

代码语言:javascript
复制
___________________
Name   |  PID
worker    1011
worker    1012
worker    1013
worker    1014
perl      1000

perl是运行gnu-parallel.的过程。而且,gnu-parallel负责运行并行工作进程。

现在问题是。如果我杀了工作服的话。

代码语言:javascript
复制
$ sudo kill 4620

该服务有指示,以重新产卵,如果被杀死,所以它重新启动。但是,服务创建的进程不会被终止。这意味着它创建了一组新的进程。现在我们有2个perl和8个工作人员。

代码语言:javascript
复制
Name   |  PID
worker    1011
worker    1012
worker    1013
worker    1014
worker    2011
worker    2012
worker    2013
worker    2014
perl      1000
perl      2000

如果你问我,那个被服务抛弃的旧程序,他们是僵尸吗?答案是否定的。他们还活着因为我测试了他们。每次服务停止时,它都会创建一个新的集合。

这是个问题。另一个问题是gnu-parallel.让我们说,我开始这项服务是新鲜的。服务很好。我运行这个命令来杀死gnu-parallel,,即perl

代码语言:javascript
复制
$ sudo kill 1000

这并没有杀死工人,他们又一次离开了,没有任何父母。但是,workon服务拦截perl的死亡并重新生成一组新的工作人员。这一次我们有一个perl和8个工作人员。所有8名工人都还活着。其中4人有父母,4人是孤儿。

现在,我该如何解决这个问题?每当服务崩溃时,我希望杀死由它创建的所有进程。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-21 11:58:45

我通过停站解决了这个问题。我相信它是一个事件侦听器,它在服务结束后执行。在我的示例中,如果运行kill -9 -pid- (服务的pid),则在服务进程终止后执行停止后块。因此,我可以编写必要的代码来删除服务产生的所有进程。

,这是我的代码,使用的是后置.

代码语言:javascript
复制
post-stop script
    exec killall php & killall perl
end script
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45144436

复制
相关文章

相似问题

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