我怎样才能杀死正在使用端口 8080 的任何进程,以便我可以流浪?
Posted
技术标签:
【中文标题】我怎样才能杀死正在使用端口 8080 的任何进程,以便我可以流浪?【英文标题】:How can I kill whatever process is using port 8080 so that I can vagrant up? [closed] 【发布时间】:2014-08-14 18:20:08 【问题描述】:在 MacOSX 上,我正在使用 Packer 构建一个 Vagrant 盒子,因此我需要不断地打开它并拆除它。我正在尝试“流浪”,并收到标准错误,因为端口正在使用中:
“Vagrant 无法转发此 VM 上的指定端口,因为它们会与已经在侦听这些端口的其他应用程序发生冲突。转发到 8080 的端口已在主机上使用。”
解决方案似乎很简单:我只需要确定保持端口 8080 处于打开状态的进程并终止该进程,对吗?没那么容易。
如果我运行命令:
nmap localhost -p 8080
我收到以下输出:
PORT STATE SERVICE
8080/tcp open http-proxy
如果我运行以下命令:
top -o prt
1360中使用的最高端口
如果我运行以下命令:
netstat -tulpn | grep :8080
我收到:
netstat: n: unknown or uninstrumented protocol
如果我运行以下命令:
lsof -i :8080
我没有收到任何输出
如果我重新启动计算机,端口现在可用,我现在可以“流浪”。
我怎样才能杀死正在使用端口 8080 的任何进程,这样我就可以在不重新启动计算机的情况下进行流浪?
【问题讨论】:
【参考方案1】:这可能会有所帮助
lsof -n -i4TCP:8080
PID 是输出中的第二个字段。
或者试试:
lsof -i -P
【讨论】:
感谢您的尝试,但我在问题中表示我没有收到 lsof 命令的输出。 我添加了另一种可能性。 您有 HP LaserJet 打印机吗? blog.hgomez.net/blog/2010/09/25/… 谢谢马克!无论出于何种原因,重新启动我的计算机后, lsof 命令什么也没输出,现在它们是。现在,所有 3 个 lsof 命令都在工作,我可以识别进程 ID 并使用以下命令将其杀死: sudo kill -9 000 ... 其中 000 是进程 ID。该进程的名称是“VBoxHeadless”。如果我得到更多关于它以前为什么不工作的信息,我会报告回来。仅供参考:我没有连接打印机。 尝试sudo lsof -n -i4TCP:8080
获取root 拥有的进程。【参考方案2】:
快速快速的解决方案:
lsof -n -i4TCP:8080
PID
是第二个字段。然后,终止该进程:
kill -9 PID
速度较慢但永久的解决方案
转到/usr/local/bin/
(可以在finder中使用command+shift+g)
创建一个名为stop
的文件。粘贴以下代码:
#!/bin/bash
touch temp.text
lsof -n -i4TCP:$1 | awk 'print $2' > temp.text
pidToStop=`(sed '2q;d' temp.text)`
> temp.text
if [[ -n $pidToStop ]]
then
kill -9 $pidToStop
echo "Congrates!! $1 is stopped."
else
echo "Sorry nothing running on above port"
fi
rm temp.text
-
保存此文件。
使文件可执行
chmod 755 stop
现在,转到终端并写stop 8888
(或任何端口)
【讨论】:
我尝试了永久解决方案,但在尝试运行脚本时出现“权限被拒绝”。通过第一次运行chmod 755 stop
解决。【参考方案3】:
如果以上接受的答案不起作用,请尝试以下解决方案。 您可以将其用于端口 8080 或任何其他端口。
sudo lsof -i tcp:3000
将 3000 替换为您想要的任何端口。运行以下命令以终止该进程。
sudo kill -9 PID
PID 是您要杀死的进程 ID。
下面是mac终端上的命令输出。
【讨论】:
我会先尝试常规杀戮(而不是 -9)。 -9 选项可能导致套接字未正确关闭。该进程可能会被终止,但另一个侦听器将在其位置分叉。【参考方案4】:使用以下命令:
lsof -n -i4TCP:8080 | awk 'print$2' | tail -1 | xargs kill -9
8080端口的进程id会被kill -9
强行查杀。
【讨论】:
【参考方案5】:sudo lsof -i:8080
通过运行上面的命令,你可以看到正在运行的所有作业。
kill -9 <PID Number>
输入 PID(进程标识号),这将终止/终止实例。
【讨论】:
【参考方案6】:为此编写脚本:
pid=$(lsof -ti tcp:8080)
if [[ $pid ]]; then
kill -9 $pid
fi
-t
参数使 lsof 的输出“简洁”,这意味着它只返回 PID。
【讨论】:
你也可以让它使用 $port 终于有一个直接获取PID的方案了。谢谢,应该是这个帖子的正确答案【参考方案7】:我需要杀死不同端口上的进程,所以我创建了一个 bash 脚本:
killPort()
PID=$(echo $(lsof -n -i4TCP:$1) | awk 'NR==1print $11')
kill -9 $PID
只需将它添加到您的 .bashrc 并像这样运行它:
killPort 8080
你可以传递任何你想要的端口号
【讨论】:
非常简洁的解决方案。在 Big Sur 为我工作【参考方案8】:我需要运行这个命令
sudo lsof -i :80 # checks port 8080
然后我得到了
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
acwebseca 312 root 36u IPv4 0x34ae935da20560c1 0t0 TCP 192.168.1.3:50585->104.25.53.12:http (ESTABLISHED)
显示哪个服务正在使用 PID
ps -ef 312
然后我得到了这个
UID PID PPID C STIME TTY TIME CMD
0 312 58 0 9:32PM ?? 0:02.70 /opt/cisco/anyconnect/bin/acwebsecagent -console
卸载 cisco web security agent 运行
sudo /opt/cisco/anyconnect/bin/websecurity_uninstall.sh
感谢:http://tobyaw.livejournal.com/315396.html
【讨论】:
【参考方案9】:它可以是 Cisco AnyConnect。 检查 /Library/LaunchDaemons/com.cisco.anyconnect.***agentd.plist 是否存在。然后用launchctl卸载它并从/Library/LaunchDaemons中删除
【讨论】:
【参考方案10】:您还可以使用活动监视器来识别并退出使用端口的进程。
【讨论】:
我该怎么做? 在 MacOSX 上:活动监视器 > 网络 > 按 PID 排序 > 找到您被阻止的端口(例如 8080、5000 等) > 单击左上角的“X”> 确认您要退出该进程。编辑运行/构建配置以确保只能创建单个服务器实例可能是个好主意,即在拆卸时释放您使用的端口。【参考方案11】:运行:nmap -p 8080 localhost
(如果您的系统上还没有 nmap,请使用 MacPorts 或 Homebrew 安装它)
本地主机 (127.0.0.1) 的 Nmap 扫描报告
主机已启动(0.00034 秒延迟)。
本地主机的其他地址(未扫描):::1
港口国服务
8080/tcp 打开 http-proxy
运行:ps -ef | grep http-proxy
UID PID PPID C STIME TTY TIME CMD
640 99335 88310 0 12:26pm ttys002 0:00.01 grep http-proxy"
运行:ps -ef 640
(将 501 替换为您的 UID)
/System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/XPCServices/com.apple.PerformanceAnalysis.animationperfd.xpc/Contents/MacOS/com.apple.PerformanceAnalysis.animationperfd
mac osx 上的 8080 端口被 installed with XCode SDK 使用了
【讨论】:
【参考方案12】:尝试网络统计
netstat -vanp tcp | grep 3000
如果您的 netstat 不支持 -p ,请使用 lsof
sudo lsof -i tcp:3000
Centos 7 使用
netstat -vanp --tcp | grep 3000
【讨论】:
【参考方案13】:参考@voutasaurus 的解决方案后。我编写了这个实用程序来简化杀死端口上正在运行的所有进程的过程。
killProcessesUsing3000 ()
pid=$(lsof -ti :3000) # The -t argument makes the output of lsof "terse" (Brief) which means that it only returns the PID.
# PID contains process processes that run on the 3000 port. In new lines if they are multiples
for num ($=pid)
echo $num
kill -9 $num
#Alias
alias kill3000="killProcessesUsing3000"
【讨论】:
【参考方案14】:对我来说这很有效
打开你的 mac 终端
kill $(lsof -t -i:8080)
解释:
lsof -t
返回 PID 并将其传递给 kill。
【讨论】:
【参考方案15】:我尝试了上述许多方法,但它们都不适合我。
几个小时后,我找到了这个班轮:
# kill 8080
alias nuke88="lsof -i tcp:8080 | grep LISTEN | awk 'print \$2' | xargs kill"
# kill 3000
alias nuke3k="lsof -i tcp:3000 | grep LISTEN | awk 'print \$2' | xargs kill"
【讨论】:
以上是关于我怎样才能杀死正在使用端口 8080 的任何进程,以便我可以流浪?的主要内容,如果未能解决你的问题,请参考以下文章
快速杀死占用8080端口进程的批处理(kill-8080.bat)