linux通过端口号定位进程的几种方法

通过端口号找进程ID(Pid)

1. 概述

日常在linux 服务器上排查问题时,会有根据端口号找对应pid(进程id)的需求,最终通过定位pid来排查问题。本文将介绍如何在linux系统上通过监听端口号找到相关的进程。

2.使用netstat命令

netstat命令通过p参数显示进程id,最后结合grep来找到对应的进程

l – 监听中的socket
t – 显示tcp连接
n – 以数字形式显示地址
u – 显示up连接
p – 显示进程id/程序名

通过输出可以看到ip地址、端口、进程id

root# netstat -ltnup         
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:17600         0.0.0.0:*               LISTEN      1293/dropbox        
tcp        0      0 127.0.0.1:17603         0.0.0.0:*               LISTEN      1293/dropbox   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      575/sshd  
tcp        0      0 127.0.0.1:9393          0.0.0.0:*               LISTEN      900/perl  
tcp        0      0 :::80                   :::*                    LISTEN      9583/docker-proxy 
tcp        0      0 :::443                  :::*                    LISTEN      9571/docker-proxy
udp        0      0 0.0.0.0:68              0.0.0.0:*                           8822/dhcpcd
...

最后grep找出22端口对应的进程,pid为575。

root# netstat -ltnup | grep ':22'
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      575/sshd

3.使用ss命令

我们以查看监听22端口的进程为例,根据括号内的结果可得到进程pid。这里sport指源端口,如果期望查看目标端口那么可以使用dport, 「dport = :22」。与netstat相比,我们不需要结合grep来筛选,直接通过端口过滤筛选出我们需要的信息。

root# ss -ltnup 'sport = :22'
Netid  State  Recv-Q  Send-Q    Local Address:Port   Peer Address:Port                     
tcp    LISTEN 0       128       0.0.0.0:22           0.0.0.0:*             users:("sshd",pid=575,fd=3))

4.使用lsof命令

lsof命令通过 -i :port_number选项来找出指定端口对应的进程。

root# lsof -i :22
COMMAND    PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd       575 root    3u  IPv4   19373      0t0  TCP *:ssh (LISTEN)

lsof可以通过-i参数指定多个端口

root# lsof -i :22 -i :68
COMMAND    PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd       575 root    3u  IPv4   19373      0t0  TCP *:ssh (LISTEN)
dhcpcd    8822 root   10u  IPv4   49601      0t0  UDP *:bootpc

5.总结

本文介绍了3个命令可以可以找出监听某个端口的进程id,日常排查网络连接数过多,分析来源可以通过这些命令帮助我们快速发现问题。

你可能感兴趣的:(运维,linux,服务器,运维)