必须用lsof -i :端口号直接定位占用进程,command列显示软件名,pid列显示进程id;若lsof未安装则先sudo apt install lsof -y;再用netstat -tulnp | grep ':端口号'查pid/程序名,配合ps -p pid -o pid,comm,args验证启动命令;最后用ss -tuln | grep ':端口号'快速确认监听状态是否真实存在。

你在统信UOS上部署服务时遇到“Address already in use”报错,或想确认8080、3306这类具体端口到底被哪个软件实际控制,就必须跳过泛泛的端口列表,直接定位到进程名和可执行文件——不是查“有哪些端口”,而是查“谁在用这个端口”。
用lsof一步锁定占用进程
这是最直接的方法:把端口号当参数传给lsof,它会立刻返回完整上下文,包括软件名、用户、启动命令、工作目录,无需二次查PID。
执行:sudo lsof -i :8080(把8080替换成你要查的实际端口号)
若提示“command not found”,说明lsof未安装,先运行:sudo apt install lsof -y
输出中COMMAND列就是软件名(如java、nginx、python3),PID列是进程ID,USER列告诉你它以谁的身份运行——这比只看到“1234/unknown”靠谱得多。
用netstat反向追踪进程路径
当你需要确认该进程是否真的在运行、它的可执行文件路径是否合法,或者lsof结果模糊时,netstat能补全关键信息。
第一步:执行 sudo netstat -tulnp | grep ':8080'(替换为你的真实端口号)
第二步:观察PID/Program name列,格式为“1234/java”,斜杠前是PID,斜杠后是二进制文件名;【注意:必须加sudo,否则其他用户进程的路径信息为空,你只能看到PID,看不到程序在哪】
第三步:用ps验证该PID对应的真实启动命令:ps -p 1234 -o pid,comm,args(把1234换成实际PID),看args列是否含-jar、--port=8080等线索,确认是不是你预期的服务。
用ss快速验证监听状态是否存在
ss不显示完整路径,但响应极快,适合先判断“这个端口当前是否真在监听”,避免被残留PID误导。
执行:sudo ss -tuln | grep ':8080'
如果输出为空,说明该端口此刻没有进程在LISTEN状态——可能进程已退出但PID残留,或根本没启动;如果有输出,Local Address列显示0.0.0.0:8080或127.0.0.1:8080,就说明监听真实存在。
这一步操作起来很简单,直接敲完回车就能看到结果。











