Rails服务器说端口已经使用过,如何杀死该进程?

时间:2010-12-17 17:36:18

标签: ruby-on-rails

我在Mac上,做着:

rails服务器

我明白了:

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

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

13 个答案:

答案 0 :(得分:621)

假设您要杀死端口3000上的任何内容(这是webrick通常使用的内容),请在终端中输入以查找进程的PID:

$ lsof -wni tcp:3000

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

$ kill -9 PID

答案 1 :(得分:104)

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

答案 2 :(得分:27)

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

lsof -i tcp:3000 -t

然后使用该进程id,只需使用ubuntu kill命令终止进程。

kill -9 pid

或者只是运行下面提到的combine命令。它将首先获取pid,然后终止该进程。

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

答案 3 :(得分:16)

对于任何绊倒这个不在Mac上的问题的人:假设您知道您的服务器在端口3000上运行,您可以通过执行以下操作一次性执行此操作:

fuser -k 3000/tcp

但正如Toby所提到的,Mac OS中的fuser实现相当原始,而且这个命令在mac上不起作用。

答案 4 :(得分:13)

有时候rails服务器有可能无法正常关闭。 您可以找到rails使用的过程

  

ps aux | grep rails

输出就像

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

您的rails服务器使用process_id 12609。

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

  

kill -9 12609

答案 5 :(得分:11)

上面的所有答案都非常好,但我需要一种在终端中输入尽可能少的方法,所以我为此创建了一个宝石。你可以只安装一次gem并在每次想要杀死Rails进程时运行命令'shutup'(当时在当前文件夹中)。

gem install shutup

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

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

您可以在每次需要时使用“shutup”命令

DICLAIMER:我是这个宝石的创造者

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

rvm @global do gem install shutup

答案 6 :(得分:2)

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

答案 7 :(得分:0)

单行解决方案:

kill -9 $(ps aux | grep 'rails s' | awk {'print$2'}); rails s

答案 8 :(得分:0)

默认情况下,Rails服务器使用端口3000。
因此,您有2个选项来运行Rails服务器。
1.您可以通过使用以下命令定义自定义端口来在其他端口上运行服务器
rails s -p 3001
2.或者您可以通过运行以下命令杀死所有正在运行的ruby进程
killall -9 ruby
然后运行rails server

答案 9 :(得分:0)

要终止特定端口上的进程,您可以尝试

npx kill-port [端口号]

答案 10 :(得分:0)

所以这是 WSL 的脚本,它可以杀死 windows 中的进程

PIDS=$(/mnt/c/windows/system32/cmd.exe /c netstat -ano | /mnt/c/windows/system32/cmd.exe /c findstr :$1 | awk '{print $5}')
for pid in $PIDS
do
    /mnt/c/windows/system32/cmd.exe /c wmic process where "processid=$pid" delete
done

示例

myscriptname 8080

答案 11 :(得分:-4)

输入:

man lsof

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

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

手册页上有更多详细信息

答案 12 :(得分:-5)

如果您使用的是Windows计算机,请执行以下步骤。

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

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

删除它。

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

多数民众赞成。

编辑: Please refer this