Linux下如何显示运行进程的PID与对应端口号?
给进程PID添加对应端口信息的实现方法
要在现有命令的基础上补充端口信息,你可以借助lsof或ss工具关联进程与端口,以下是两种实用方案:
方案一:用lsof关联进程与端口
lsof能列出进程打开的网络端口,结合awk的命令调用能力,可以直接在原有输出中追加端口信息:
ps -ef | awk '/[t]ick/{ pid = $2 cmd = $9 # 调用lsof获取该PID的监听端口 "lsof -i -P -n -p " pid " | grep LISTEN | awk '\''{print $9}'\''" | getline port # 输出结果,无端口时显示提示 print "PID=" pid " 命令=" cmd " 端口=" (port ? port : "无监听端口") }'
关键参数说明:
lsof -i -P -n -p <PID>:仅列出指定PID的网络连接,-P不解析端口别名,-n跳过IP解析,提升查询速度grep LISTEN:仅筛选处于监听状态的端口(若需包含已建立的连接,可移除该部分)
方案二:用ss工具实现(更高效)
ss是netstat的替代工具,性能更优,可通过进程信息反向匹配端口:
# 先提取目标进程的PID和命令,再匹配对应端口 ps -ef | awk '/[t]ick/{print $2, $9}' | while read pid cmd; do # 从ss输出中匹配对应PID的端口 port=$(ss -tulnp | grep ":.*users:(\"$cmd\",pid=$pid,.*)" | awk '{print $5}' | awk -F: '{print $NF}' | head -n1) # 格式化输出 echo "PID=$pid 命令=$cmd 端口=${port:-无监听端口}" done
关键参数说明:
ss -tulnp:列出TCP/UDP的监听端口,-p显示关联的进程详情,-n跳过地址解析- 通过grep精准匹配对应PID和命令的端口记录,提取端口号后输出
工具安装(若未预装):
- Debian/Ubuntu系:
sudo apt install lsof iproute2(iproute2包包含ss) - RHEL/CentOS系:
sudo yum install lsof iproute2
内容的提问来源于stack exchange,提问作者kka
相关产品推荐
相关产品推荐

