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
而已。
编辑: 请参阅此