在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的任何进程,以便我可以在不重新启动计算机的情况下进行流浪?
答案 0 :(得分:99)
这可能会有所帮助
lsof -n -i4TCP:8080
PID是输出中的第二个字段。
或尝试:
lsof -i -P
答案 1 :(得分:40)
lsof -n -i4TCP:8080
PID
是第二个字段。然后,杀死这个过程:
kill -9 PID
转到/usr/local/bin/
(可以在finder中使用命令+ 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
stop 8888
(或任何端口)答案 2 :(得分:20)
如果上述接受的答案无效,请尝试以下解决方案。 您可以将它用于端口8080或任何其他端口。
sudo lsof -i tcp:3000
用您想要的任何端口替换3000。运行以下命令以终止该进程。
sudo kill -9 PID
PID是您要杀死的进程ID。
以下是mac Terminal上的命令输出。
答案 3 :(得分:3)
我需要运行此命令
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安全代理运行
sudo /opt/cisco/anyconnect/bin/websecurity_uninstall.sh
答案 4 :(得分:2)
它可以是Cisco AnyConnect。 检查/Library/LaunchDaemons/com.cisco.anyconnect.vpnagentd.plist是否存在。然后使用launchctl卸载它并从/ Library / LaunchDaemons
中删除答案 5 :(得分:2)
sudo lsof -i:8080
通过运行以上命令,您可以查看正在运行的所有作业。
kill -9 <PID Number>
输入PID(进程标识号),这样将终止/杀死实例。
答案 6 :(得分:1)
运行:nmap -p 8080 localhost
(如果您的系统上还没有安装带有MacPorts或Homebrew的nmap)
localhost(127.0.0.1)的Nmap扫描报告
主机已启动(延迟时间为0.00034秒)。
localhost的其他地址(未扫描)::: 1
港口国服务
8080 / tcp打开http-proxy
运行:ps -ef | grep http-proxy
UID PID PPID C STIME TTY TIME CMD
640 99335 88310 0 12:26 pm ttys002 0:00.01 grep http-proxy“
运行:ps -ef 640
(用您的UID替换501)
/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
使用答案 7 :(得分:1)
为此编写脚本:
pid=$(lsof -ti tcp:8080)
if [[ $pid ]]; then
kill -9 $pid
fi
-t
参数使lsof的输出为“ terse”,这意味着它仅返回PID。
答案 8 :(得分:1)
使用以下命令:
lsof -n -i4TCP:8080 | awk '{print$2}' | xargs kill -9
将使用kill -9
强制选择并杀死端口8080的进程ID。
答案 9 :(得分:1)
我需要杀死不同端口上的进程,所以我创建了一个bash脚本:
killPort() {
PID=$(echo $(lsof -n -i4TCP:$1) | awk 'NR==1{print $11}')
kill -9 $PID
}
只需将其添加到您的.bashrc中,然后像这样运行它:
killPort 8080
您可以传递任何您想要的端口号
答案 10 :(得分:0)
您还可以使用活动监视器使用端口识别和退出该过程。
答案 11 :(得分:0)
尝试netstat
netstat -vanp tcp | grep 3000
如果您的netstat不支持-p,请使用lsof
sudo lsof -i tcp:3000
对于Centos 7使用
netstat -vanp --tcp | grep 3000
答案 12 :(得分:0)
参考@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"