前言
- 场景介绍
项目启动失败或者启动成功访问报404,很可能是访问端口被占用导致,记录一下杀死被占用端口的常用命令,共同学习
实现过程
方案1
- 查找被占用的端口号
netstat -tln | grep 8081
netstat -anp | grep 8081 # 显示正在使用Socket的程序识别码和程序名称
如图,最后一列监控状态为 LISTEN 表示已经被占用
此处注意,图中显示的LISTENING并不表示端口被占用,不要和LISTEN混淆,查看具体端口时候,必须要看到tcp,端口号,LISTEN那一行,才表示端口被占用了
- 查找被占用的端口PID
以普通用户操作,故加上了sudo,如果是以root用户操作,不用加sudo即可查看
sudo lsof -i:8081
- kill对应进程
kill -9 29686
方案2
- 一个命令关闭某个端口占用
# 这个命令亲测不好使,欢迎解答原因
kill netstat -nlp | grep :端口号| awk '{print $7}' | awk -F"/" '{ print $1 }'
命令详解
ps
- 选项介绍
-A 显示所有进程(等价于-e)(utility)
-a 显示一个终端的所有进程,除了会话引线
-N 忽略选择。
-d 显示所有进程,但省略所有的会话引线(utility)
-x 显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility)
-p pid 进程使用cpu的时间
-u uid or username 选择有效的用户id或者是用户名
-g gid or groupname 显示组的所有进程。
U username 显示该用户下的所有进程,且显示各个命令的详细路径。如:ps U zhang;(utility)
-f 全部列出,通常和其他选项联用。如:ps -fa or ps -fx and so on.
-l 长格式(有F,wchan,C 等字段)
-j 作业格式
-o 用户自定义格式。
v 以虚拟存储器格式显示
s 以信号格式显示
-m 显示所有的线程
-H 显示进程的层次(和其它的命令合用,如:ps -Ha)(utility)
e 命令之后显示环境(如:ps -d e; ps -a e)(utility)
h 不显示第一行 - 常用指令
ps -ef | grep tomcat # ps 与grep 常用组合用法,查找特定进程,连同命令行
ps -aux | grep tomcat
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显示程序
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的文件:
参考链接
- Linux 如何kill杀死(关闭)某个被占用的端口
- LINUX中如何查看某个端口是否被占用
- ps 命令详解
- inux系统下ps -aux和ps -ef命令参数的作用及区别详解
https://cloud.tencent.com/developer/article/1357618