应先用sudo ss -tuln列出所有活跃监听端口以摸清底数,再通过sudo netstat -tulnp或sudo lsof -i :端口号定位占用进程,必要时用/proc/PID/net/tcp手动解析十六进制端口并用nc验证。

您在统信UOS系统中部署服务失败、连接被拒绝或启动时报“Address already in use”,说明目标端口正被某个进程监听占用,必须立即定位具体是哪个端口号正在被使用——不是查“谁占了8080”,而是先搞清“当前到底哪些端口活起来了”。
用ss命令快速列出所有活跃监听端口
ss是UOS默认内置的高性能工具,响应快、不依赖额外包,适合第一时间摸清端口底数。
执行:sudo ss -tuln
这一步会输出所有TCP(-t)和UDP(-u)的监听(-l)端口,且以数字形式(-n)显示,避免DNS解析卡顿。注意看Local Address列:0.0.0.0:* 表示监听所有IPv4地址,:::* 表示监听所有IPv6地址,星号前的数字就是端口号。
若只想看TCP端口(最常见场景),去掉-u参数:sudo ss -tln
用netstat确认端口与进程的绑定关系
当ss只显示端口但不确定归属时,netstat能补全PID和程序名,但需先确保net-tools已安装。
执行:sudo netstat -tulnp
如果提示“command not found”,说明net-tools未预装,立刻运行:sudo apt install net-tools -y
【注意:必须加sudo,否则无法读取其他用户进程的路径信息,导致PID/Program name列为空或显示“-”】
输出中PID/Program name列格式为“1234/nginx”或“5678/java”,斜杠前是进程ID,斜杠后是可执行文件名——这就是端口的实际控制者。
用lsof按端口号反向锁定进程详情
当你已经知道目标端口号(比如怀疑8080被占),lsof能一步到位给出完整上下文,比先查端口再找PID再查进程更直接。
方法一:查指定端口
执行:sudo lsof -i :8080(把8080换成你要查的数字)
方法二:查全部监听中的TCP端口
执行:sudo lsof -i -sTCP:LISTEN
若提示lsof未安装,运行:sudo apt install lsof -y
输出中COMMAND列是进程名,PID列是进程ID,USER列是运行用户,PWD列是工作目录——这些信息足以判断该进程是否应被保留。
手动验证可疑进程的真实监听行为
当netstat、lsof、ss结果矛盾或缺失时,说明可能遇到权限受限、僵尸进程或内核模块异常,此时必须绕过用户态工具,直读内核暴露的原始数据。
第一步:根据进程名获取PID
例如查找redis-server:pidof redis-server
第二步:检查该进程是否真打开了socket文件描述符
将上一步得到的PID(如1234)代入:sudo ls -l /proc/1234/fd/ | grep socket
第三步:读取其TCP监听表并解析端口
sudo cat /proc/1234/net/tcp
端口号以十六进制大端序存储,比如00001F90对应十进制8080——需将后四位1F90转为十进制(1×4096 + 15×256 + 9×16 + 0 = 8080)。

















