我在mac上,做:

rails server

我得到:

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

我知道我可以在一个新的端口上启动一个进程,但是我想终止这个进程。


当前回答

现有的答案很好,但我发现Bijan的答案撒得太广了,涵盖了可能不相关的过程。

下面是一个1-liner,它结合了port和ruby作为字符串搜索

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

分解它的工作原理:

Kill -9将终止列出的进程。但是首先运行$()内的命令

Lsof -i tcp:3000列出该端口上的所有进程

-t是简洁模式,所以只有pid

-c通过命令搜索,在本例中是ruby,因为我使用的是puma

-a是all,它将-i和-c组合在一起

其他回答

现有的答案很好,但我发现Bijan的答案撒得太广了,涵盖了可能不相关的过程。

下面是一个1-liner,它结合了port和ruby作为字符串搜索

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

分解它的工作原理:

Kill -9将终止列出的进程。但是首先运行$()内的命令

Lsof -i tcp:3000列出该端口上的所有进程

-t是简洁模式,所以只有pid

-c通过命令搜索,在本例中是ruby,因为我使用的是puma

-a是all,它将-i和-c组合在一起

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

如果你使用的是windows机器,请遵循以下步骤。

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

这里有一个名为server.pid的文件

删除它。

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

这是它。

编辑:请参考这个

这是一个在windows中杀死进程的WSL脚本

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

缺省情况下,rails服务器使用3000端口。 因此,您有两个选项来运行rails服务器。 1. 您可以使用以下命令定义自定义端口,从而在其他端口上运行服务器 Rails s -p 3001 2. 或者您可以通过运行以下命令关闭所有正在运行的ruby进程 Killall -9红宝石 然后运行rails服务器