跳到主要内容

Linux 查看端口占用进程

在 Linux 运维中,有时候会发生 TCP/IP 端口占用情况,这时候就需要排查到底是哪个进程占用了该端口。通常会使用 lsofnetstat 命令。

lsof 命令

使用 -i 选项,命令格式如下:

lsof -i:端口号

例如:

$ sudo lsof -i:1883
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mosquitto 1623 mosquitto 6u IPv4 49406 0t0 TCP *:1883 (LISTEN)
mosquitto 1623 mosquitto 7u IPv6 49407 0t0 TCP *:1883 (LISTEN)

注意:Ubuntu 需要添加 sudo 才能看到输出信息。

netstat 命令

netstat 命令的关键则是使用 -p 选项,表示显示正在使用 socket 的程序识别码和程序名称。

例如:

$ sudo netstat -tunpl | grep 1883
tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN 1623/mosquitto
tcp6 0 0 :::1883 :::* LISTEN 1623/mosquitto

可以看到,占用 1883 端口的是 mosquitto,进程 ID 是 1623。

注意:使用 netstat 命令时,并非所有进程都能被检测到,所有非本用户的进程信息将不会显示,如果想看到所有信息,则必须切换到 root 用户(添加 sudo)。