如何查看特定进程占用的端口?
美国、香港服务器
如何查看特定进程占用的端口?
11-12 来源:
在 Linux 系统中,查看特定进程占用的端口,核心是通过进程 ID(PID)或进程名称反向查询其绑定的端口,常用工具为 lsof、netstat 和 ss,具体方法如下:
方法 1:通过进程名称查询(推荐,直观)
适用于已知进程名称(如nginx、mysql)的场景,用 lsof 或 ps 结合管道筛选:
1.1 使用 lsof 命令(直接关联进程与端口)
bash
# 格式:lsof -i -P -n | grep 进程名称
# 示例:查看nginx进程占用的端口
lsof -i -P -n | grep nginx
参数说明:
-i:显示网络相关的文件(含端口)
-P:不解析端口号为服务名称(直接显示数字端口,如 80 而非 http)
-n:不解析 IP 为域名(加速查询)
输出解读:
若结果显示 nginx 1234 root 6u IPv4 12345 0t0 TCP *:80 (LISTEN),表示 nginx 进程(PID 1234)占用 TCP 80 端口并处于监听状态。
1.2 先查 PID 再查端口(分步操作)
若进程名称有重复或模糊(如java进程),可先通过 ps 找到 PID,再查询端口:
bash
# 步骤1:查询进程PID(以java为例)
ps -ef | grep java
# 输出示例:root 5678 1 0 10:00 ? 00:00:00 java -jar app.jar
# 步骤2:通过PID查询占用的端口(使用lsof或netstat)
lsof -i -P -n | grep 5678 # 方法A:lsof
netstat -tulnp | grep 5678 # 方法B:netstat(需root权限)
ss -tulnp | grep 5678 # 方法C:ss(需root权限)
方法 2:通过进程 ID(PID)直接查询
已知进程 PID 时,直接用工具定位其端口,适合脚本或精准查询场景:
2.1 使用 lsof(最简洁)
bash
# 格式:lsof -i -a -p PID
# 示例:查看PID为1234的进程占用的端口
lsof -i -a -p 1234
-a:与 -i 和 -p 结合,意为 “同时满足网络相关且属于该 PID”。
2.2 使用 netstat 或 ss(需 root 权限)
bash
# netstat:显示PID对应的端口
sudo netstat -tulnp | grep 1234
# ss:更高效的替代命令
sudo ss -tulnp | grep 1234
关键说明
权限问题:lsof 查看非当前用户进程、netstat/ss 使用 -p 参数时,需加 sudo 获取 root 权限,否则可能无法显示完整信息。
无输出情况:若进程未绑定端口(如纯后台进程),上述命令可能无结果,属正常现象。
区分 TCP/UDP:输出中 TCP 或 UDP 字段标识端口协议,LISTEN 表示端口处于监听状态(对外服务)。
示例场景
假设要查看mysql进程占用的端口:
bash
# 方法1:直接查进程名
lsof -i -P -n | grep mysql
# 输出可能为:mysqld 7890 mysql 10u IPv4 56789 0t0 TCP 127.0.0.1:3306 (LISTEN)
# 说明:mysql进程(PID 7890)占用TCP 3306端口,仅监听本地IP(127.0.0.1)
# 方法2:先查PID再查端口
ps -ef | grep mysql # 得到PID为7890
sudo ss -tulnp | grep 7890 # 同样可看到3306端口
通过以上方法,可快速定位任意进程绑定的端口,便于排查端口冲突或安全风险。
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快