题 在Mac上查找(并终止)进程锁定端口3000


如何查找侦听/使用我的tcp端口的进程?我在mac os x上。

有时,在崩溃或一些错误后,我的rails应用程序锁定端口3000.我找不到它使用ps -ef ...我怎么找到愚蠢的东西并杀死它,残忍......?

做的时候

rails server

我明白了

已经在使用的地址 - bind(2)(Errno :: EADDRINUSE)

2014年更新:

要完成以下某些答案:执行kill命令后,可能需要删除pid文件 rm ~/mypath/myrailsapp/tmp/pids/server.pid


1061
2017-10-04 12:19


起源


端口3000是高度Rails开发的具体,你不同意吗?很少有人会找到这个常见的Rails开发问题的答案,并且如果被移动它将被重新询问。我反对。我的2美分。 - oma
呃,谁在乎3000是特定的轨道......另外+1因为我试图解锁端口8000 ....(我不明白为什么他们关闭这些有用的问题)。 - Dean Hiller
在@Kevin Suttle的答案中可以找到一个非常巧妙的解决方案来杀死任何用户指定的端口上的进程。这里为后人转载: function killport() { lsof -i TCP:$1 | grep LISTEN | awk '{print $2}' | xargs kill -9 } - user456584
对此进行重新投票。开发人员通常需要在自己的计算机上管理资源。 Server Fault适用于专业服务器管理员,而非最终用户开发人员计算机。 - jmort253
我投票重新开放。 Bash脚本可以被认为是编程。 - trusktr


答案:


  1. 你可以试试 netstat

    netstat -vanp tcp | grep 3000
    
  2. 对于 macOS El Capitan 更新(或者如果你的netstat不支持 -p), 使用 lsof

    sudo lsof -i tcp:3000 
    
  3. 对于 Centos 7 使用

    netstat -vanp --tcp | grep 3000
    

1763
2017-10-04 12:48



netstat -anp 失败。 netstat: option requires an argument -- p - oma
netstat -anp tcp | grep 3000 节目 tcp4 1062 0 127.0.0.1.3000 127.0.0.1.51255 ESTABLISHED 接下来是什么? 1062不是pid ...... - oma
哦,是的!你的更新是正确的。 lsof -i tcp:3000 好:) - oma
谢谢!你的答案催生了我的“death_to'port'”脚本。 (#!的/ usr / bin中/红宝石 lsof -t -i tcp:#{ARGV.first} | xargs kill) - Sv1
lsof的“简洁”标志产生适合于后续杀戮的输出: lsof -t -i tcp:1234 | xargs kill - Manav


找:

[sudo] lsof -i :3000

杀:

kill -9 <PID>

1173
2017-09-09 20:58



发现这个最有帮助。我喜欢lsof -i如何拥有表头,所以我知道所有废话都意味着什么 - netpoetica
Upvote简单和完整 - BradGreens
有时 lsof -i:port 什么都不会。尝试 sudo lsof -i:port。 - kilik52
推荐尝试 kill -15 <PID> 在诉诸之前 -9 为了安全。 - Jamon Holmgren
@Jamon Holmgren为什么?两者都做什么?为什么是 kill <PID> 不够/危险/不完整? - Michael Trouw


上面没有任何东西适合我。有我经验的任何人都可以尝试以下(为我工作):

跑:

lsof -i :3000 (where 3000 is your current port in use)

然后检查报告的PID的状态:

ps ax | grep <PID>

最后,“用它来做”:

kill -QUIT <PID>

94
2018-03-07 20:24



这实际上似乎比Filip Spiridonov稍后给出的更好的答案,Filip Spiridonov有277票赞成你的9.你的是6个月之前,并且有相同的信息和更多的解释。没有正义...... - Floris


您可以使用 lsof -i:3000

那就是“列出打开文件”。这将为您提供进程列表以及它们使用的文件和端口。


83
2017-10-04 12:36



我在10.5 lepard(更新Q)。我不知道这是否重要,但lsof不显示端口。 lsof -h(lsof 4.78)我也太神秘了...... - oma
嗯。在Leopard上不确定,但试试(作为根  - 这很重要,我认为) lsof -i:3000。 - Matt Gibson
根没有必要。 lsof -i:3000也有效...编辑你的答案并把它放在那里。更明显。我给了你一个upvote,但给用户#的答案。谢谢你的帮助! - oma


使用端口3000提取进程的PID并使其终止的单行程序。

lsof -ti:3000 | xargs kill

-t标志从lsof输出中删除除PID之外的所有内容,从而很容易将其删除。


76
2017-08-05 21:03



还会杀掉浏览器 本地主机:3000 打开 - rlovtang
您可以使用以下方法过滤掉“侦听”端口: lsof -ti:3000 -sTCP:LISTEN - Zlemini


在你的 .bash_profile,创建一个快捷方式 terminate 3000过程:

terminate(){
  lsof -P | grep ':3000' | awk '{print $2}' | xargs kill -9 
}

然后,打电话 $terminate 如果它被阻止了


49
2018-05-16 09:17



您可以为任何端口提供足够的灵活性: github.com/kevinSuttle/dotfiles/commit/... - Kevin Suttle
这样的描述性名称= p - Michael Peterson
我有类似的东西,但我通过端口。我将我的函数KP命名为kill port。 - Joseph Chambers


要强制终止类似的进程,请使用以下命令

lsof -n -i4TCP:3000 

其中3000是进程运行的端口号

这将返回进程ID(PID) 并运行

kill -9 "PID"

将PID替换为运行第一个命令后得到的数字

For Instance, if I want kill the process running on port 8080


41
2017-12-28 04:21