关闭占用端口的程序
Windows杀占用端口的进程
1.用 netstat -ano | findstr 端口号
找到占用端口的程序的pid
netstat -ano | findstr 8080
2.然后用 taskkill /pid pid /f
杀进程
taskkill /pid pid /f
Linux杀占用端口的进程
方法1:用fuser
sudo fuser -k -n tcp 8080
方法2:用netstat -anp 加 kill -9
1.用netstat -anp | grep 端口号
找到占用端口的进程的pid
netstat -anp | grep 8080
2.kill -9 pid 杀进程
kill -9 pid
Linux的netstat
和 Windows 的netstat
名称相同, 参数 -anp
和 -ano
也接近, 方便记忆
但连已过时的CentOS7都默认没装 netstat
而预装了 ss
命令
想使用netstat
, 可安装 net-tools
sudo yum install net-tools -y
方法3: 用 ss -tclnp
或 ss -anp
找到端口对应的pid, 然后 kill -9 pid
ss
用法基本和netstat相似, ss
更新更块
ss
和 netstat
在CentOS7下的一个对比👇
[root@1235vb-c7min samba]# netstat -lnp | grep 445
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 18707/smbd
tcp6 0 0 :::445 :::* LISTEN 18707/smbd
[root@1235vb-c7min samba]# ss -lnp | grep 445
tcp LISTEN 0 50 *:445 *:* users:(("smbd",pid=18707,fd=36))
tcp LISTEN 0 50 [::]:445 [::]:* users:(("smbd",pid=18707,fd=34))
[root@1235vb-c7min samba]# netstat -tulnp | grep 445
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 18707/smbd
tcp6 0 0 :::445 :::* LISTEN 18707/smbd
[root@1235vb-c7min samba]# ss -tulnp | grep 445
tcp LISTEN 0 50 *:445 *:* users:(("smbd",pid=18707,fd=36))
tcp LISTEN 0 50 [::]:445 [::]:* users:(("smbd",pid=18707,fd=34))
[root@1235vb-c7min samba]# netstat -anp | grep 445
tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 18707/smbd
tcp 0 0 22.125.0.0:445 22.0.0.1:61827 ESTABLISHED 19409/smbd
tcp6 0 0 :::445 :::* LISTEN 18707/smbd
unix 3 [ ] STREAM CONNECTED 16445 672/dbus-daemon /run/dbus/system_bus_socket
[root@1235vb-c7min samba]# ss -anp | grep 445
u_str ESTAB 0 0 * 15636 * 16445 users:(("NetworkManager",pid=703,fd=11))
u_str ESTAB 0 0 /run/dbus/system_bus_socket 16445 * 15636 users:(("dbus-daemon",pid=672,fd=14))
tcp LISTEN 0 50 *:445 *:* users:(("smbd",pid=18707,fd=36))
tcp ESTAB 0 0 22.125.0.0:445 22.0.0.1:61827 users:(("smbd",pid=19409,fd=40))
tcp LISTEN 0 50 [::]:445 [::]:* users:(("smbd",pid=18707,fd=34))
方法4: 用 lsof
步骤 1: 使用 lsof
查找占用端口的进程
lsof
(list open files)是一个列出当前系统打开文件的工具,由于在Unix和Linux中,一切皆文件,包括网络连接,所以你可以使用lsof
来查找占用某个端口的进程。
例如,如果你想查找占用端口8080
的进程,你可以运行以下命令:
lsof -i :8080
这个命令会列出所有占用端口8080
的进程的信息,包括进程ID(PID)。
步骤 2: 使用 kill
杀死进程
一旦你找到了占用端口的进程的PID,你可以使用kill
命令来杀死它。例如,如果PID是12345
,你可以运行以下命令:
kill -9 12345
这里的-9
选项表示发送SIGKILL
信号来强制杀死进程。请注意,强制杀死进程可能会导致数据丢失或其他问题,所以最好先尝试不带-9
选项的kill
命令,它会发送SIGTERM
信号来请求进程正常退出。
合成一步
将上述两个步骤结合起来,你可以使用以下命令来查找并杀死占用端口8080
的进程:
kill -9 $(lsof -t -i :8080)
这个命令首先运行lsof -t -i :8080
来查找占用端口8080
的进程的PID,并将PID传递给kill -9
来杀死该进程。这里的-t
选项告诉lsof
只输出PID,而不输出其他信息。
请注意,在运行这些命令时,你可能需要具有足够的权限(例如,使用sudo
)。
对比W和L的 netstat
Windows | Linux |
---|---|
netstat -ano | findstr | netstat -anp | grep |
ano | anp |
taskkill /pid pid /f | kill -9 pid |