在 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

答案

  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

找:

sudo lsof -i :3000

杀:

kill -9 <PID>

以上对我没有任何帮助。有我经验的任何人都可以尝试以下操作(为我工作):

跑:

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

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

ps ax | grep <PID>

最后,“随它去”:

kill -QUIT <PID>

单线使用端口 3000 提取进程的 PID 并终止它。

lsof -ti:3000 | xargs kill

-t 标志从 lsof 输出中除去 PID 以外的所有内容,从而很容易杀死它。

您可以使用lsof -i:3000

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

单个命令行很容易记住:

npx kill-port 3000

有关搜索的更强大工具:

npx fkill-cli


PS:他们使用第三方 javascript 程序包。 npx随 Node.js 内置。

来源: tweet | 的 github

最简单的解决方案

对于单端口:

kill $(lsof -ti:3000)  #3000 is the port to be freed

使用单行命令杀死多个端口:

kill $(lsof -ti:3000,3001)  #3000 and 3001 are the ports to be freed

lsof -ti:3000

82500(进程 ID)

lsof -ti:3001

82499

lsof -ti:3001,3000

82499 82500

杀死 $(lsof -ti:3001,3000)

在单个命令中终止 82499 和 82500 进程。

package.json脚本中使用此命令:

"scripts": { "start": "kill $(lsof -ti:3000,3001) && npm start" }

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

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

然后,如果被阻止,则调用$terminate

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

lsof -n -i4TCP:3000

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

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

kill -9 "PID"

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

对于实例,如果我想杀死在端口8080上运行的进程

lsof -P | grep ':3000' | awk '{print $2}'

这只会给您在 MacOS 上测试过的 pid。