【发布时间】: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 <id>是“你能停止这个过程吗”,而kill -9 <id>是“杀死这个过程......现在!” :-) -
默认情况下,
kill发送 TERM 信号。通常,这会终止进程;但是如果进程有一个为 TERM 定义的处理程序,它将运行(这个想法是允许进程在退出之前进行清理)。如果进程决定这样做,它甚至可以忽略 TERM 信号。另一方面,kill -9发送 KILL 信号,该信号无法被捕获或忽略。
标签: ruby-on-rails macos process lsof