如何查找(和终止)侦听/使用我的tcp端口的进程?我在mac os x上。
有时,在崩溃或一些错误后,我的rails应用程序锁定端口3000.我找不到使用ps -ef ...
做的时候
rails server
我明白了
已经在使用的地址 - bind(2)(Errno :: EADDRINUSE)
2014年更新:
要完成以下一些答案:执行kill命令后,删除pid文件可能是必要的rm ~/mypath/myrailsapp/tmp/pids/server.pid
netstat
netstat -vanp tcp | grep 3000
-p
),请使用lsof
sudo lsof -i tcp:3000
netstat -vanp --tcp | grep 3000
在OS-X El Capitan上的命令行执行:
kill -kill `lsof -t -i tcp:3000`
lsof的Terse选项只返回PID。
杀死端口进程的方法之一是使用python库:freeport(https://pypi.python.org/pypi/freeport/0.1.9)。安装完成后,只需:
# install freeport
pip install freeport
# Once freeport is installed, use it as follows
$ freeport 3000
Port 3000 is free. Process 16130 killed successfully
要查看阻止端口的进程:
netstat -vanp tcp | grep 3000
要杀死阻塞端口的进程:
kill $(lsof -t -i :3000)
找到开放的连接
lsof -i -P | grep -i“听”
杀死进程ID
杀死-9'PID'
找到PID并终止进程。
lsof -ti:3000 | xargs kill
找到并杀死:
这个单一的命令行很简单,工作正常。
kill -9 $(lsof -ti tcp:3000)
实现这一目标的可能方法:
最佳
top命令是查看系统资源使用情况的传统方法,并查看占用最多系统资源的进程。 Top显示进程列表,其中顶部使用最多的CPU。
PS
ps命令列出正在运行的进程。以下命令列出了系统上运行的所有进程:
ps -A
您还可以通过grep管道输出以搜索特定进程,而无需使用任何其他命令。以下命令将搜索Firefox进程:
ps -A | grep firefox
将信号传递给程序的最常用方法是使用kill命令。
kill PID_of_target_process
lsof的
所有打开文件的列表以及打开它们的进程。
lsof -i -P | grep -i "listen"
kill -9 PID
要么
lsof -i tcp:3000
最简单的解决方案:使用单行命令终止多个端口。
kill $(lsof -t -i:3000,3001) // 3000 and 3001 are the ports to be freed
lsof -t -i:3000
82500
lsof -t -i:3001
82499
lsof -t -i:3001,3000
82499 82500
杀$(lsof -t -i:3001,3000)
在单个命令中终止进程82499和82500。
lsof -t -i:3000
lsof -t -i:3001
您可以在package.json
脚本中使用它
"scripts": {
"start": "kill $(lsof -t -i:3000,3001) && npm start"
}
添加到~/.bash_profile
:
function killTcpListen () {
kill -QUIT $(sudo lsof -sTCP:LISTEN -i tcp:$1 -t)
}
然后source ~/.bash_profile
并运行
killTcpListen 8080
使用sindresorhus的fkill工具,您可以这样做:
$ fkill :3000
找:
[sudo] lsof -i :3000
杀:
kill -9 <PID>
TL; DR:
lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill
如果您处于使用该端口的客户端和服务器的情况,例如:
$ lsof -i tcp:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 2043 benjiegillam 21u IPv4 0xb1b4330c68e5ad61 0t0 TCP localhost:3000->localhost:52557 (ESTABLISHED)
node 2043 benjiegillam 22u IPv4 0xb1b4330c8d393021 0t0 TCP localhost:3000->localhost:52344 (ESTABLISHED)
node 2043 benjiegillam 25u IPv4 0xb1b4330c8eaf16c1 0t0 TCP localhost:3000 (LISTEN)
Google 99004 benjiegillam 125u IPv4 0xb1b4330c8bb05021 0t0 TCP localhost:52557->localhost:3000 (ESTABLISHED)
Google 99004 benjiegillam 216u IPv4 0xb1b4330c8e5ea6c1 0t0 TCP localhost:52344->localhost:3000 (ESTABLISHED)
那你可能不想杀两个。
在这种情况下,您可以使用-sTCP:LISTEN
仅显示正在侦听的进程的pid。将此与-t
简洁格式相结合,您可以自动终止该过程:
lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill
我为此做了一个小功能,将它添加到你的rc文件(.bashrc
,.zshrc
或其他)
function kill-by-port {
if [ "$1" != "" ]
then
kill -9 $(lsof -ni tcp:"$1" | awk 'FNR==2{print $2}')
else
echo "Missing argument! Usage: kill-by-port $PORT"
fi
}
然后你可以输入kill-by-port 3000
来杀死你的rails服务器(用3000代替它运行的任何端口)
如果失败了,你总是可以从rails根目录中输入kill -9 $(cat tmp/pids/server.pid)
lsof -i tcp:port_number
- 将列出在该端口上运行的进程
kill -9 PID
- 将杀死这个过程
在你的情况下,它会
来自终端的lsof -i tcp:3000
找到进程的PID
kill -9 PID
你应该尝试这个,这种技术是OS独立的。
在您的应用程序旁边有一个名为tmp的文件夹,里面有另一个名为pids的文件夹。该文件包含服务器pid文件。只需删除该文件即可。端口自动杀死自己。
我认为这是一种简单的方法。
这是一个帮助程序bash函数,用于按名称或端口终止多个进程
fkill() {
for i in $@;do export q=$i;if [[ $i == :* ]];then lsof -i$i|sed -n '1!p';
else ps aux|grep -i $i|grep -v grep;fi|awk '{print $2}'|\
xargs -I@ sh -c 'kill -9 @&&printf "X %s->%s\n" $q @';done
}
用法:
$ fkill [process name] [process port]
例:
$ fkill someapp :8080 node :3333 :9000
如果你想要一个免费的代码方式 - 打开活动管理器和强制kill节点:)
使用以下命令终止端口3000 kill $(lsof -t -i:3000)
上的进程
你可以试试这个
netstat -vanp tcp | grep 3000
在mac OS中
kill -9 $(lsof -i TCP:3000 | grep LISTEN | awk '{print $2}')
步骤1:查找正在运行的服务器:ps aux | grep puma
步骤2:杀死那些服务器Kill -9 [服务器号]
上面没有任何东西对我有效。有我经验的任何人都可以尝试以下(为我工作):
跑:
lsof -i :3000 (where 3000 is your current port in use)
然后检查报告的PID的状态:
ps ax | grep <PID>
最后,“用它来做”:
kill -QUIT <PID>
您应该使用终端尝试此代码:
$ killall -9 ruby
使用端口3000提取进程的PID并使其终止的单行程序。
lsof -ti:3000 | xargs kill
-t标志从lsof输出中删除除PID之外的所有内容,从而可以轻松地将其删除。
你可以使用lsof -i:3000
。
那就是“列出打开文件”。这将为您提供进程列表以及它们使用的文件和端口。
在你的.bash_profile
中,为terminate
3000过程创建一个快捷方式:
terminate(){
lsof -P | grep ':3000' | awk '{print $2}' | xargs kill -9
}
然后,如果它被阻止,请调用$terminate
。
lsof -P | grep ':3000' | awk '{print $2}'
这将为您提供在MacOS上测试的pid。