Rails服务器说端口已经使用了,如何杀死这个进程?

我在Mac上,正在做:

导轨服务器

我得到:

2010-12-17 12:35:15] INFO WEBrick 1.3.1 [2010-12-17 12:35:15] INFO ruby 1.8.7 (2010-08-16) [i686-darwin10.4.0] [2010-12-17 12:35:15] WARN TCPServer Error: Address already in use - bind(2) Exiting 

我知道我可以在新的港口启动一个,但我想杀死这个过程。

假设你想要杀死端口3000上的任何东西(这是webrick通常使用的),请在terminal中input以查找进程的PID:

 $ lsof -wni tcp:3000 

然后,使用PID列中的数字来终止进程:

 $ kill -9 PID 

kill -9 $(lsof -i tcp:3000 -t)

您需要使用tcp端口3000获取程序的进程ID。获取进程ID

 lsof -i tcp:3000 -t 

然后使用该进程ID,只需使用ubuntu kill命令杀死进程即可。

 kill -9 pid 

或者只是运行下面提到的联合命令。 它将首先获取pid,然后杀死该进程。

 kill -9 $(lsof -i tcp:3000 -t) 

对于那些不在Mac上的人来说,如果你知道你的服务器是在3000端口上运行的,你可以通过执行下面的命令来实现:

 fuser -k 3000/tcp 

但是正如托比所说的,在Mac OS上执行fuser是相当原始的,这个命令在mac上不起作用。

有些时候,Rails服务器没有正确closures。 你可以findrails所使用的进程

ps aux | grep导轨

输出会像

 user 12609 9.8 0.5 66456 45480 pts/0 Sl+ 21:06 0:02 /home/user/.rvm/rubies/ruby-2.2.0-preview1/bin/ruby bin/rails s 

这里process_id 12609被你的rails服务器使用。

你可以通过命令轻松杀死它

杀-9 12609

上面所有的答案都非常好,但是我需要一个尽可能less的方式在terminal上input,所以我为此创build了一个gem。 每次你想杀死Rails进程(当前文件夹中)时,你只能安装一次gem并运行“shutup”命令。

gem install shutup

然后进入您的rails项目的当前文件夹并运行

shutup #这将杀死当前正在运行的Rails进程

你可以使用命令'shutup'每次你想要的

DICLAIMER:我是这个gem的创造者

注意:如果您正在使用rvm全局安装gem

 rvm @global do gem install shutup 

ps aux | grep rails使用这个命令可以杀死服务器

input:

 man lsof 

然后查找-w,-n和-i

-i:互联网的东西-n:使之更快-w:切换警告

手册页上有更多的细节

如果您在Windows机器上,请按照下列步骤操作。

 c:/project/ cd tmp c:/project/tmp cd pids c:/project/tmp/pids dir 

在那里你会有一个名为server.pid的文件

删除它。

 c:/project/tmp/pid> del *.pid 

而已。

编辑: 请参阅此