如何查找侦听/使用我的tcp端口的进程?我在mac os x上 .
有时,在崩溃或一些错误后,我的rails应用程序锁定端口3000.我找不到它使用ps -ef ...我怎么找到愚蠢的东西并杀死它,残忍......?
做的时候
rails server
我明白了
地址已在使用中 - bind(2)(Errno :: EADDRINUSE)
2014年更新:
要完成以下一些答案:执行kill命令后,可能需要删除pid文件 rm ~/mypath/myrailsapp/tmp/pids/server.pid
28 回答
你可以使用命令
使用此命令查找端口是
在你的情况下输入
这是一个帮助程序bash函数,用于按名称或端口终止多个进程
用法:
例:
添加到
~/.bash_profile
:然后
source ~/.bash_profile
并运行killTcpListen 8080
您还可以更改服务器端口(config / puma.rb)第12行上的配置 .
$ port ENV.fetch(“PORT”){3000}
至
$ port ENV.fetch(“PORT”){3001}
或您认为合适的任何特定港口 . 这避免了需要对进程进行清道夫搜寻 . 你总是可以重启你的电脑 . 当你在另一个端口上启动服务器时,它通常会终止你打开的第一个服务器 .
使用端口3000提取进程的PID并使其终止的单行程序 .
-t标志从lsof输出中删除除PID之外的所有内容,从而很容易将其删除 .
你可以使用
lsof -i:3000
.那就是“列出打开文件” . 这将为您提供进程列表以及它们使用的文件和端口 .
在OS-X El Captain上的命令行执行:
lsof的Terse选项仅返回PID .
步骤1:查找正在运行的服务器:
ps aux | grep puma
步骤2:杀死那些服务器Kill -9 [服务器号]您应该使用终端尝试此代码:
我为此做了一个小功能,将它添加到你的rc文件(
.bashrc
,.zshrc
或其他)然后你可以输入
kill-by-port 3000
来杀死你的rails服务器(用3000代替它运行的任何端口)如果失败了,你总是可以从rails根目录中输入
kill -9 $(cat tmp/pids/server.pid)
这将为您提供在MacOS上测试的pid .
查找并杀死:
这个单一的命令行很简单,工作正常 .
要强制终止类似的进程,请使用以下命令
其中3000是进程运行的端口号
这将返回进程ID(PID)并运行
将PID替换为运行第一个命令后得到的数字
这个命令行很容易记住:
npx kill-port 3000
对于搜索功能更强大的工具:
npx fkill-cli
PS:他们使用第三方javascript包
资料来源:tweet | github
在
.bash_profile
中,为terminate
3000流程创建快捷方式:然后,如果它被阻止,请调用
$terminate
.杀死端口进程的方法之一是使用python库:freeport(https://pypi.python.org/pypi/freeport/0.1.9) . 安装完成后,只需:
如果以上工作没有尝试:
实现这一目标的可能方法:
top
top命令是查看系统资源使用情况的传统方法,并查看占用最多系统资源的进程 . Top显示进程列表,其中顶部使用最多的CPU .
ps
ps命令列出正在运行的进程 . 以下命令列出了系统上运行的所有进程:
您还可以通过grep管道输出以搜索特定进程,而无需使用任何其他命令 . 以下命令将搜索Firefox进程:
将信号传递给程序的最常用方法是使用kill命令 .
lsof
所有打开文件的列表以及打开它们的进程 .
要么
尝试使用Ctrl C而不是Ctrl Z来终止以前运行的应用程序 .
否则,您可以通过运行
[sudo] lsof -i :3000
找到在端口3000上运行的进程然后杀死进程
kill -9 <PID>
netstat
-p
),请使用lsof
找:
杀:
TL; DR:
如果您处于使用该端口的客户端和服务器的情况,例如:
然后你可能不想杀死两者 .
在这种情况下,您可以使用
-sTCP:LISTEN
仅显示正在侦听的进程的pid . 将其与-t
简洁格式相结合,您可以自动终止该过程:上面没有任何东西适合我 . 有我经验的任何人都可以尝试以下(为我工作):
跑:
然后检查报告的PID的状态:
最后,“用它来做”:
Find the open connection > lsof -i -P | grep -i“听”
Kill by process ID
你应该试试这个,这种技术是OS Independent .
在您的应用程序旁边有一个名为tmp的文件夹,里面有另一个名为pids的文件夹 . 该文件包含服务器pid文件 . 只需删除该文件即可 . 端口自动杀死自己 .
我认为这是一种简单的方法 .
使用sindresorhus的fkill工具,您可以这样做:
找到PID并终止进程 .
要查看阻止端口的进程:
netstat -vanp tcp | grep 3000
要杀死阻塞端口的进程:
kill $(lsof -t -i :3000)