【问题标题】:process won't die after being killed with `kill` command用`kill`命令杀死进程后不会死
【发布时间】:2013-02-23 21:39:14
【问题描述】:

我正在尝试运行 rails server 来启动本地服务器,但出现此错误

...
WARN  TCPServer Error: Address already in use - bind(2)
Exiting
...

所以我去寻找占用端口的进程并将其杀死。 服务器仍然无法启动。 事实证明,lsof 仍然显示了该进程(即使在它被杀死之后):

$ lsof -P | grep ':3000' 
ruby      52944 user    7u    IPv4 0xffffff800bdafbd8       0t0      TCP *:3000 (LISTEN)
$ kill 52944    <<<<<<< pid 52944 should have died here!
$ lsof -P | grep ':3000' 
ruby      52944 user    7u    IPv4 0xffffff800bdafbd8       0t0      TCP *:3000 (LISTEN)

知道如何真正终止进程吗?

(这是OSX

【问题讨论】:

  • kill -9 (以及另外三个字符来发表评论..)
  • @thebjorn - 将此作为答案。
  • @thebjorn 是的!谢谢! (为什么需要-9?)
  • 我不记得确切的不同信号是什么,我只是认为kill &lt;id&gt; 是“你能停止这个过程吗”,而kill -9 &lt;id&gt; 是“杀死这个过程......现在!” :-)
  • 默认情况下,kill 发送 TERM 信号。通常,这会终止进程;但是如果进程有一个为 TERM 定义的处理程序,它将运行(这个想法是允许进程在退出之前进行清理)。如果进程决定这样做,它甚至可以忽略 TERM 信号。另一方面,kill -9 发送 KILL 信号,该信号无法被捕获或忽略。

标签: ruby-on-rails macos process lsof


【解决方案1】:

使用

kill -9 <id>

杀死顽固的进程:-)

【讨论】:

    猜你喜欢
    • 2021-09-29
    • 2011-08-17
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多