总结查看端口、进程占用情况(lsof、netstat、ps、kill)

时间:2024-03-05 20:25:30

一、Linux查看端口占用情况

1、lsof(list open files)列出当前系统打开文件

查看指定端口号语法格式:

lsof -i:端口号

如果命令找不到

[root@bogon ~]# lsof -i:1521
-bash: lsof: command not found

请安装该命令

# yum install lsof -y

# lsof -i:7075

[root@localhost ~]# lsof -i:7075
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 17394 root    4u  IPv6  75775      0t0  TCP *:7075 (LISTEN)

查看所有端口

# lsof -i

[root@localhost ~]# lsof -i
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1105 root    3u  IPv4  18473      0t0  TCP *:ssh (LISTEN)
sshd    1105 root    4u  IPv6  18482      0t0  TCP *:ssh (LISTEN)
master  1904 root   13u  IPv4  19162      0t0  TCP localhost:smtp (LISTEN)
master  1904 root   14u  IPv6  19163      0t0  TCP localhost:smtp (LISTEN)
openvpn 2411 root    6u  IPv4  21972      0t0  TCP 192.168.1.56:openvpn (LISTEN)
sshd    3172 root    3u  IPv4  33620      0t0  TCP 192.168.1.56:ssh->192.168.2.113:53585 (ESTABLISHED)

COMMAND(进程的名称)

PID(进程的标识符)

USER(进程所有者)

FD(文件描述符)

TYPE(文件类型)

SIZE/OFF(文件大小)

DEVICE(指定磁盘名称)

NODE(索引节点)

NAME(打开文件的确切名称)

2、netstat

netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况

netstat 查看端口占用语法格式:

netstat -tunlp | grep 端口号

  • -t (tcp) 仅显示tcp相关选项
  • -u (udp)仅显示udp相关选项
  • -n  拒绝显示别名,能显示数字的全部转化为数字
  • -l   仅列出在Listen(监听)的服务状态
  • -p  显示建立相关链接的程序名
[root@localhost ~]# netstat -tunlp | grep 7075
tcp6       0      0 :::7075                 :::*                    LISTEN      17394/docker-proxy  
[root@localhost ~]# 
[root@localhost ~]# netstat -tunlp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      19356/mysqld        
[root@localhost ~]# 
[root@localhost ~]# netstat -tunlp | grep 1521
tcp6       0      0 :::1521                 :::*                    LISTEN      17470/docker-proxy  
[root@localhost ~]# 
[root@localhost ~]# netstat -tunlp | grep 1525
[root@localhost ~]# 
[root@localhost ~]# netstat -tunlp | grep 1522
tcp6       0      0 :::1522                 :::*                    LISTEN      17436/docker-proxy  
[root@localhost ~]# 

在查到端口占用的进程后,如果你要杀掉对应的进程可以使用 kill 命令

kill -9 PID

如上实例,我们看到 7075 端口对应的 PID 为 17394,使用以下命令杀死进程:

# kill -9 17394

显示网卡列表

# netstat -i

[root@localhost ~]# netstat -i
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
docker0          1500   185610      0      0 0        215874      0      0      0 BMRU
ens18            1500  6242072 302310      0 0        653911      0      0      0 BMRU
lo              65536       46      0      0 0            46      0      0      0 LRU
veth5a87904      1500        0      0      0 0            24      0      0      0 BMRU
vethb1d0229      1500        0      0      0 0            24      0      0      0 BMRU
vethed2e0ba      1500    15711      0      0 0         16094      0      0      0 BMRU
vethee02449      1500    98501      0      0 0        127243      0      0      0 BMRU
[root@localhost ~]# 

 3、ps(用于显示当前进程的状态)

使用PS命令查看和控制进程

显示本用户的进程

# ps

[root@localhost ~]# ps
  PID TTY          TIME CMD
30059 pts/0    00:00:00 bash
31149 pts/0    00:00:00 ps

显示所有用户的进程

# ps -au

[root@localhost ~]# ps -au
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      3319  0.0  0.0 110092   860 tty1     Ss+  07:28   0:00 /sbin/agetty --noclear tty1 linux
root     21611  0.0  0.0 115408  1912 pts/0    Ss   16:13   0:00 -bash
root     21640  0.0  0.0 155332  1776 pts/0    R+   16:15   0:00 ps -au

显示所有进程和其状态

# ps aux

显示指定进程和其状态

# ps -aux | grep 服务

[root@localhost ~]# ps -aux | grep httpd
root     31122  0.0  0.0 112680   696 pts/0    S+   14:01   0:00 grep --color=auto httpd
[root@localhost ~]# 
[root@localhost ~]# ps -aux | grep vsftpd
root     31124  0.0  0.0 112680   696 pts/0    S+   14:01   0:00 grep --color=auto vsftpd
[root@localhost ~]#

4、pidof(查看服务的pid)

# pidof nginx

[root@localhost ~]# ps aux | grep nginx
root     11579  0.0  0.0 112704   956 pts/2    S+   16:45   0:00 grep --color=auto nginx
root     27326  0.0  0.0  56712  1264 ?        Ss   Jun26   0:00 nginx: master process /usr/sbin/nginx
root     27327  0.0  0.0  57252  2652 ?        S    Jun26   0:00 nginx: worker process
[root@localhost ~]#
[root@localhost ~]# netstat -tunlp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      27326/nginx
[root@localhost ~]#
[root@localhost ~]# pidof nginx
27327 27326

 

二、Windows下查看端口占用情况

1、netstat

查找所有运行的端口

C:\Users\Administrator> netstat -ano

查看被占用端口对应的PID

语法格式:

netstat -ano | findstr “端口号”

C:\Users\Administrator> netstat -ano | findstr "9558"

最后一位数字就是PID,这里是8112

2、tasklist

查看指定PID的进程

语法格式:

tasklist | findstr “PID”

C:\Users\Administrator>tasklist | findstr "8112"

3、taskkill(结束进程)

强制(/F参数)杀死pid为8112的所有进程包括子进程(/T参数)

taskkill /T /F /PID 8112

也可小写

taskkill /f /t /PID 8112

或者

taskkill /f /t /im 程序名.exe

taskkill /fi “PID eq 5052”

 end