跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何在Linux利用Netstat查看特定端口的进程占用情况

netstat在现代Linux中已逐步弃用,需sudo netstat -tulnp | grep ':8080'查端口占用,但推荐用ss或lsof替代;注意区分真监听与TIME_WAIT残留状态。
netstat
在现代 Linux 上已逐步被弃用,但如果你的系统(如 CentOS 7、某些嵌入式或旧版定制系统)仍默认提供它,且你明确需要使用
netstat
查特定端口的进程占用,那必须加
-p
参数并以 root 权限运行,否则看不到 PID 和进程名。 netstat -tulnp 是唯一能显示进程信息的组合 单独执行
netstat -tuln
只能看到监听端口和地址,看不到谁在用。只有加上
-p
(process)才可能关联到进程,但该参数强制要求 root 权限——非 root 用户执行会报 “can't identify protocol” 或直接隐藏 PID 列。
-t
:只看 TCP(不加则混入 UDP,干扰判断)
-u
:如需查 UDP 端口(如 DNS 的 53 端口),才加;否则可省
-l
:只显示 LISTEN 状态,排除已建立的连接干扰
-n
:避免反向 DNS 解析拖慢输出,也防止服务名别名(如把 80 显示成 http)掩盖真实端口号
-p
:关键参数,但必须配合
sudo
,否则对其他用户进程不可见 grep :8080 要注意冒号和空格位置 过滤时写
grep ':8080'
才准确。写成
grep '8080'
可能误匹配到 PID 为 8080 的进程,或匹配到 18080、80801 这类端口;写成
grep :8080
(无引号)在部分 shell 下会被当作命令分隔符解析出错。 正确:
sudo netstat -tulnp | grep ':8080'
错误:
sudo netstat -tulnp | grep 8080
(不安全) 错误:
sudo netstat -tulnp | grep :8080
(shell 报错或行为异常) 看到 PID 后别直接 kill -9,先确认进程是否可杀 输出形如
tcp6 0 0 *:8080 *:* LISTEN 12345/nginx
,其中
12345
是 PID,
nginx
是进程名。但这个
nginx
可能是主进程,也可能是 worker 子进程——直接
kill -9 12345
可能导致服务异常退出、未释放资源或触发 systemd 自动重启。 CentOS Linux 7.9.2009 CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。 下载 先用
ps -p 12345 -o pid,ppid,cmd,%mem
看父进程和启动命令 查服务归属:
systemctl list-units --type=service | grep nginx
,再
systemctl status nginx
若属 systemd 管理,优先用
sudo systemctl stop nginx
,而非硬杀 netstat 不可用时别硬等,立刻换 ss 或 lsof 遇到
bash: netstat: command not found
,说明系统没装
net-tools
,尤其常见于 Ubuntu 22.04+、CentOS 8+、Alpine 等精简镜像。此时强行安装
net-tools
不仅多占空间,还引入过时工具链。 用
sudo ss -tulnp | grep ':8080'
——输出格式几乎一致,速度更快,无需额外安装 用
sudo lsof -i :8080
——更直观,直接按端口反查,字段清晰(
COMMAND
、
PID
、
USER
都在一列) 二者都依赖 root 权限,但
lsof
在容器内有时因挂载限制无法读取所有进程,
ss
更底层、更稳定 真正容易被忽略的点是:即使
netstat -tulnp
显示某端口被占用,也可能只是 socket 处于
TIME_WAIT
状态,背后进程早已退出。这种情况下杀 PID 没用,得等内核回收或调
net.ipv4.tcp_fin_timeout
。排查前先确认是“真监听”还是“假残留”。

相关文章