Linux系统下如何通过进程PID查询对应占用的端口号
错误原因排查
你之前的命令无法得到正确结果,是Shell语法使用错误:${#PID}是获取PID变量字符串长度的语法,不会输出你要匹配的进程号本身,因此无法命中目标结果。
可用查询方案
方案1:netstat 命令(仅适用于环境保留 netstat 工具的情况)
将命令中的${PID}替换为你实际要查询的进程号后执行即可:
sudo netstat -anp | grep -w "${PID}"
参数说明:-w用于精确匹配完整PID,避免PID是其他进程号子串时出现误匹配;-p参数默认会输出进程PID和程序名称,无需额外加e/o参数。
如果只需要提取纯端口号,追加过滤逻辑即可:
sudo netstat -anp | grep -w "${PID}" | awk '{print $4}' | awk -F: '{print $NF}'
方案2:ss 命令(当前主流Linux发行版默认预装,是官方推荐的netstat替代工具)
sudo ss -tulpn | grep -w "${PID}"
参数说明:-t匹配TCP端口、-u匹配UDP端口、-l仅匹配监听状态端口、-p输出进程信息、-n直接输出端口号不做服务名解析。
提取纯端口号写法:
sudo ss -tulpn | grep -w "${PID}" | awk '{print $5}' | awk -F: '{print $NF}'
方案3:lsof 命令(通用进程文件查询工具,适配几乎所有Linux环境)
sudo lsof -p "${PID}" -i -P -n
参数说明:-p指定要查询的PID、-i仅过滤网络相关资源、-P直接输出端口号不做服务名映射、-n不做IP域名解析。
提取纯端口号写法:
sudo lsof -p "${PID}" -i -P -n | awk 'NR>1 {print $9}' | awk -F: '{print $NF}' | sort -u
如果执行时提示对应命令不存在,可以用你环境的包管理器安装对应工具即可,比如Debian/Ubuntu系执行apt install iproute2 lsof,CentOS/RHEL系执行yum install iproute lsof。
内容的提问来源于stack exchange,提问作者Tasfia Sharmin
相关产品推荐
相关产品推荐

