2011-11-12 86 views
9

对于启动应用程序我使用工头。从Procfile工头不会杀死进程

工头启动过程
web: bundle exec rails server thin -p $PORT 
worker: bundle exec rake environment resque:work QUEUE=send_mail 
api: bundle exec rails server thin -p $PORT 

如果我按Ctrl + C组合在控制台,我跑工头,领班结束,但跑的过程亦不是被杀。是否有可能杀死领班遇害时领班跑步的过程。

+0

我有完全相同的问题。 Foreman不会杀死用Ruby编写的[Faye](http://faye.jcoglan.com/)服务器。 – Oleander

+0

+1在这里...我也遇到了福尔曼杀死Ruby Faye服务器的问题。我怀疑它与Foreman发送的信号有关,它是为了杀死它们而开始的,尽管当我手动启动一个Faye服务器时,我没有任何问题可以用ctrl + c来杀死它。 – Bryan

+1

它最终杀死他们吗?据我了解福尔曼,它会发出一个SIGTERM,然后10秒后SIGKILL。 –

回答

1

只要存在打开的连接,薄层就不会终止。 Faye使用长轮询或WebSockets(持久连接)。 所以最终的结果是,Thin正在等待您的Faye连接关闭。

试着打开Thin安装的信号处理程序,你应该没问题。

8

示例如下假设端口使用的是4567,然后执行:

lsof -i :4567 

这给你的进程的PID,说34564,然后用

kill -9 34564 

杀死它,如果你使用的是Windows ,安装cygwin以获得lsofkill命令。

+0

如果你不想搜索PID,那么你可以使用'killall'工头:master' – harianus

0

我已经组建了一个小的单行其认定过程ID和杀死进程

kill -9 `lsof -P -i :5000 | sed -n 's/python *\([0-9]*\).*\:5000.*/\1/p'` 

在这种情况下,我运行在端口5000蟒蛇的过程,但你也可以运行一些其他其他端口上的进程类型,因此您需要相应地自定义此一行。