You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

lsof -i:<端口>与ss -lp查询端口结果不一致的原因排查

问题分析与解决方法

核心原因:ss默认的端口别名解析

这是因为ss默认会将数字端口号解析为/etc/services配置文件中对应的服务别名,而8080端口在该文件中对应的别名是webcache。当你用grep 8080过滤时,ss的输出显示的是别名而非数字端口,因此匹配不到;而lsof默认直接显示数字端口,所以能正常捕获到记录。

验证与确认

你可以直接查看/etc/services中的对应条目来验证:

cat /etc/services | grep 8080

输出会类似:

webcache        8080/tcp                # WWW caching service
webcache        8080/udp

正确的ss查询方式

要让ss直接显示数字端口并匹配8080,只需添加-n参数关闭端口解析:

sudo ss -lnp 2>/dev/null | grep 8080

或者,你也可以通过匹配地址中的端口号部分来过滤(即使ss显示别名,地址字段仍会保留:8080格式):

sudo ss -lp 2>/dev/null | grep ':8080'

关于ss是否遗漏的说明

ss并没有遗漏端口记录,只是输出格式的默认行为导致数字端口被替换为服务别名。只要调整查询参数,就能和lsof得到一致的监听端口结果。另外需要注意:

  • ss -lp仅显示处于监听状态的套接字,而lsof -i:8080 | grep -v CLOSE_WAIT可能包含已建立的连接(如ESTABLISHED状态),这类连接需要用ss -tup来查询。

清理僵尸PID的补充建议

  1. 确认占用端口的PID后,先尝试优雅停止进程:
    kill <PID>
    
  2. 如果优雅停止无效,再强制终止:
    kill -9 <PID>
    
  3. 可以结合netstat(部分RHEL系统默认预装)辅助验证端口占用:
    netstat -tulnp | grep 8080
    

内容的提问来源于stack exchange,提问作者Marc Leprince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:12:16