Linux 如何kill杀死(关闭)某个被占用的端口

例子:关闭8082端口

1. 查找被占用的端口

[root@VM_0_17_centos home]# netstat -tln | grep 8082
tcp6       3      0 :::8082                 :::*                    LISTEN

2. 查找被占用端口的PID

[root@VM_0_17_centos home]# sudo lsof -i:8082
COMMAND  PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    5873 root   15u  IPv6 7341566      0t0  TCP *:us-cli (LISTEN)

3. kill 掉这个进程

[root@VM_0_17_centos home]# sudo kill -9 5873
[1]+  已杀死               java -jar democ-0.0.1-SNAPSHOT.jar

4. 进程和端口有关的三个常用linux命令

(1)静态进程查看

选项

-A :所有的进程均显示出来,与 -e 具有同样的效用;
-e 同 -a
-a : 显示现行终端机下的所有进程,包括其他用户的进程;
-u :以用户为主的进程状态 ;
x :通常与 a 这个参数一起使用,可列出较完整信息。
输出格式规划:

l :较长、较详细的将该PID 的的信息列出;
j :工作的格式 (jobs format)
-f :做一个更为完整的输出。

常用指令

	ps -ef|grep java  //查看tomcat 是否彻底关闭
	ps -ef | grep tomcat  ////查看tomcat 是否开启

(2)netstat 网络查看

选项

-a或--all:显示所有连线中的Socket; 
	-A<网络类型>--<网络类型>:列出该网络类型连线中的相关地址; 
	-c或--continuous:持续列出网络状态; 
	-C或--cache:显示路由器配置的快取信息; 
	-e或--extend:显示网络其他相关信息; 
	-F或--fib:显示FIB; 
	-g或--groups:显示多重广播功能群组组员名单; 
	-h或--help:在线帮助; 
	-i或--interfaces:显示网络界面信息表单; 
	-l或--listening:显示监控中的服务器的Socket; 
	-M或--masquerade:显示伪装的网络连线; 
	-n或--numeric:直接使用ip地址,而不通过域名服务器; 
	-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称; 
	-o或--timers:显示计时器; 
	-p或--programs:显示正在使用Socket的程序识别码和程序名称; 
	-r或--route:显示Routing Table; 
	-s或--statistice:显示网络工作信息统计表; 
	-t或--tcp:显示TCP传输协议的连线状况; 
	-u或--udp:显示UDP传输协议的连线状况; 
	-v或--verbose:显示指令执行过程; 
	-V或--version:显示版本信息; 
	-w或--raw:显示RAW传输协议的连线状况; 
	-x或--unix:此参数的效果和指定"-A unix"参数相同; 
	--ip或--inet:此参数的效果和指定"-A inet"参数相同。

常用指令

netstat -at     # 列出所有TCP端口
netstat -lt  # 显示监听TCP端口
netstat -st    # 显示所有TCP的统计信息
netstat -p 显示 PID 和进程名称
netstat -r //路由信息
netstat -antp | grep ssh //查看服务
netstat -antp | grep 22//查看端口  n 显示ip p显示程序

(3)lsof 文件查看

选项

lsof filename 显示打开指定文件的所有进程
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username 显示所属user进程打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -i 用以显示符合条件的进程情况
lsof -i46@hostname|hostaddr
46> IPv4 or IPv6
protocol –> TCP or UDP
hostname –> Internet host name
hostaddr –> IPv4地址
service –> /etc/service中的 service name (可以不只一个)
port –> 端口号 (可以不只一个)

常用指令

lsof -i:4000
	查看所属root用户进程所打开的文件类型为txt的文件:

喜欢的记得点赞关注我哦!

在这里插入图片描述

在某些情况下,即使使用 `kill` 或 `kill -9` 命令终止了占用端口进程端口仍可能显示为“已占用”。这种情况可能由多种原因引起,以下是详细分析及解决方案: ### 端口未释放的可能原因及应对措施 1. **进程未完全终止** 某些进程可能以守护模式运行,或由系统服务自动重启。例如,`systemd` 管理的服务在被终止后可能立即重新启动。 可通过以下命令检查进程是否仍在运行: ```bash ps -ef | grep PID ``` 如果服务由 `systemd` 管理,可使用以下命令禁用自动重启: ```bash sudo systemctl stop serviceName sudo systemctl disable serviceName ``` 2. **端口处于 `TIME_WAIT` 状态** TCP 连接关闭后,端口可能会在一段时间内(通常为 60 秒)保持 `TIME_WAIT` 状态,以确保网络中残留的数据包被正确处理。 查看端口状态可使用: ```bash ss -antp | grep :端口号 ``` 若端口处于 `TIME_WAIT` 状态,通常无需干预,等待其自动释放即可。若需立即释放,可调整内核参数: ```bash sudo sysctl -w net.ipv4.tcp_tw_reuse=1 sudo sysctl -w net.ipv4.tcp_tw_recycle=1 ``` 上述设置可临时生效,如需永久生效,应将其写入 `/etc/sysctl.conf` 文件中。 3. **僵尸进程或孤儿进程** 某些进程可能已终止,但未被父进程回收,导致其状态仍保留在系统中。这类进程不会实际占用端口,但在某些工具中可能显示为“占用”。 可使用以下命令查看僵尸进程: ```bash ps -ef | grep defunct ``` 若发现僵尸进程,通常需重启其父进程或系统以清除残留状态。 4. **容器或虚拟机中的端口冲突** 如果使用了 Docker 或其他容器技术,端口可能被容器内部的进程占用,而非宿主机上的进程。 可通过以下命令列出运行中的容器: ```bash docker ps ``` 确认容器内是否运行了占用端口的服务,并进入容器内部进行排查: ```bash docker exec -it 容器ID bash ``` 5. **内核模块或驱动问题** 极少数情况下,某些内核模块或网络驱动可能导致端口无法正常释放。可通过重启系统来强制释放所有端口。 ```bash sudo reboot ``` ### 示例:强制释放 8080 端口 ```bash # 查找占用 8080 端口进程 lsof -i :8080 # 假设 PID 为 1234 # 尝试终止进程 sudo kill 1234 # 若进程未响应,使用强制终止 sudo kill -9 1234 # 检查进程是否仍在运行 ps -ef | grep 1234 # 检查端口状态 ss -antp | grep :8080 ``` ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tronhon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值