我该如何杀死正在使用端口8080的任何进程,以便让我无所事事?


97

在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的任何进程,以便无需重新启动计算机就可以无所事事?

Answers:


172

这可能有帮助

lsof -n -i4TCP:8080 

PID是输出中的第二个字段。

或尝试:

lsof -i -P

感谢您的尝试,但我在我的问题中说我没有从lsof命令获得任何输出。
杰森·柯伦

我增加了另一种可能性。
Mark Setchell 2014年

您是否碰巧有一台HP LaserJet打印机?blog.hgomez.net/blog/2010/09/25/…–
Mark

4
谢谢马克!无论出于何种原因,在重新启动计算机之后,lsof命令什么都没有输出,现在它们已经输出。现在,所有3条lsof命令都可以正常工作,我可以识别进程ID并使用以下命令将其杀死:sudo kill -9 000 ...其中000是进程ID。进程的名称为“ VBoxHeadless”。如果我了解到以前为什么它不起作用的更多信息,我将报告。仅供参考:我没有连接打印机。
杰森·柯伦

尝试sudo lsof -n -i4TCP:8080选择root拥有的进程。
mpelzsherman '19

99

快速解决方案:

lsof -n -i4TCP:8080

PID是第二个领域。然后,终止该过程:

kill -9 PID

速度较慢,但​​永久性的解决方案

  1. 转到/usr/local/bin/ (可以在finder中使用command + shift + g)

  2. 制作一个名为的文件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
  1. 保存此文件。
  2. 使文件可执行 chmod 755 stop
  3. 现在,去终端写stop 8888(或任何端口)

4
我尝试了永久解决方案,但在尝试运行脚本时收到“权限被拒绝”。首先解决chmod 755 stop
nomadoda '18

35

如果上述答案无效,请尝试以下解决方案。您可以将其用于端口8080或任何其他端口。

sudo lsof -i tcp:3000 

用所需的任何端口替换3000。在命令下运行以终止该过程。

sudo kill -9 PID

PID是您要终止的进程ID。

以下是mac Terminal上命令的输出。

命令输出


1
我会先尝试常规杀死(而不是-9)。-9选项可能导致套接字未正确关闭。该过程可能会被杀死,但另一个监听器将代替它。
stackPusher

6

要编写此脚本:

pid=$(lsof -ti tcp:8080)
if [[ $pid ]]; then
  kill -9 $pid
fi

-t参数使lsof的输出“ terse”,这意味着它仅返回PID。


1
您可能也需要花费$ port使其起作用
mebada

最后是直接获取PID的解决方案。谢谢,应该是此主题的正确答案
Olympiloutre

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 Security Agent运行

sudo /opt/cisco/anyconnect/bin/websecurity_uninstall.sh

学分至:http : //tobyaw.livejournal.com/315396.html



2

它可以是Cisco AnyConnect。检查/Library/LaunchDaemons/com.cisco.anyconnect.vpnagentd.plist是否存在。然后使用launchctl卸载它,并从/ Library / LaunchDaemons中删除


1

您还可以使用“活动监视器”使用该端口识别并退出该过程。


1
我该怎么办?
EmilStenström17年

在MacOSX上:活动监视器>网络>按PID排序>找到被阻止的端口(例如8080、5000等)>单击左上方的“ X”>确认要退出该过程。最好编辑运行/构建配置,以确保只能创建单个服务器实例,即在拆除时释放使用的端口。
亚历克斯·弗里德曼

1

运行:(nmap -p 8080 localhost如果您的系统上尚未安装nmap,请在MacPorts或Homebrew中安装它)

本地主机的Nmap扫描报告(127.0.0.1)

主机已启动(0.00034s延迟)。

本地主机的其他地址(未扫描):: 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

Xcode SDK所安装的组件使用mac osx上的端口8080


1

使用以下命令:

lsof -n -i4TCP:8080 | awk '{print$2}' | xargs kill -9

将使用强制选择并杀死端口8080的进程ID kill -9


1

我需要杀死不同端口上的进程,因此创建了一个bash脚本:

killPort() {
  PID=$(echo $(lsof -n -i4TCP:$1) | awk 'NR==1{print $11}')
  kill -9 $PID
}

只需将其添加到您的.bashrc中,然后像这样运行它:

killPort 8080

您可以传递任何您想要的端口号


0

尝试netstat

netstat -vanp tcp | grep 3000

如果您的netstat不支持-p,请使用lsof

sudo lsof -i tcp:3000 

对于Centos 7使用

netstat -vanp --tcp | grep 3000
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.