Linux 端口和进程管理详细指南
一、查看端口使用情况
1. netstat
命令示例
# 查看所有TCP和UDP监听端口
$ netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::80 :::* LISTEN
udp 0 0 0.0.0.0:68 0.0.0.0:*
# 查看详细信息(包括进程名和PID)
$ sudo netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
tcp6 0 0 :::80 :::* LISTEN 5678/nginx
- 查询指定端口的基本语法
netstat -tunlp | grep <端口号>
# 或
netstat -anp | grep <端口号>
### 示例1:查询80端口的使用情况
```bash
$ sudo netstat -tunlp | grep :80
tcp6 0 0 :::80 :::* LISTEN 1234/nginx
输出解析:
tcp6
:协议类型(IPv6的TCP协议)0 0
:接收队列和发送队列大小:::80
:本地地址和端口(::表示所有IPv6地址,80是端口):::*
:远程地址和端口(*表示任意)LISTEN
:连接状态(监听状态)1234/nginx
:进程PID和名称
2. ss
命令示例
# 查看所有监听端口
$ ss -tuln
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:*
tcp LISTEN 0 511 *:80 *:*
# 显示进程信息
$ sudo ss -tunlp
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
tcp LISTEN 0 511 *:80 *:* users:(("nginx",pid=5678,fd=6))
3. lsof
命令示例
# 查看所有网络连接
$ sudo lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1234 root 3u IPv4 12345 0t0 TCP *:ssh (LISTEN)
nginx 5678 www 6u IPv6 23456 0t0 TCP *:http (LISTEN)
# 查看特定端口(如80)
$ sudo lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 5678 www 6u IPv6 23456 0t0 TCP *:http (LISTEN)
二、查看进程情况
1. ps
命令示例
# 查看所有进程
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 169316 13056 ? Ss May10 0:01 /sbin/init
www 5678 0.0 0.5 123456 45678 ? S May10 0:10 nginx: worker process
# 查找特定进程
$ ps aux | grep nginx
www 5678 0.0 0.5 123456 45678 ? S May10 0:10 nginx: worker process
2. top
命令示例
$ top
top - 14:30:45 up 2 days, 3:15, 2 users, load average: 0.15, 0.05, 0.01
Tasks: 120 total, 1 running, 70 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.2 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 8000000 total, 1000000 free, 2000000 used, 5000000 buff/cache
KiB Swap: 2000000 total, 1900000 free, 100000 used. 5500000 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5678 www 20 0 123456 45678 1234 S 0.0 0.6 0:10.05 nginx
1234 root 20 0 169316 13056 5678 S 0.0 0.2 0:01.23 sshd
三、查找并终止进程
1. 查找特定端口对应的进程
# 查找使用80端口的进程
$ sudo lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 5678 www 6u IPv6 23456 0t0 TCP *:http (LISTEN)
# 或者使用ss
$ sudo ss -tunlp | grep :80
tcp LISTEN 0 511 *:80 *:* users:(("nginx",pid=5678,fd=6))
2. 终止进程的多种方法
# 优雅终止(发送SIGTERM信号)
$ sudo kill 5678
# 强制终止(发送SIGKILL信号)
$ sudo kill -9 5678
# 通过进程名终止
$ sudo pkill nginx
# 终止所有同名进程
$ sudo killall nginx
# 组合命令: 查找并终止占用8080端口的进程
$ sudo kill -9 $(sudo lsof -t -i:8080)
四、总结表格
操作类型 | 常用命令 | 示例 | 说明 |
---|---|---|---|
查看端口 | netstat -tunlp | sudo netstat -tunlp | 查看所有监听端口和对应进程 |
ss -tunlp | sudo ss -tunlp | 更现代的端口查看工具 | |
lsof -i | sudo lsof -i :80 | 查看特定端口使用情况 | |
查看进程 | ps aux | ps aux | grep nginx | 查看所有进程或筛选特定进程 |
top | top | 实时进程监控 | |
htop | htop | 增强版top(需安装) | |
终止进程 | kill PID | kill 1234 | 正常终止进程 |
kill -9 PID | kill -9 1234 | 强制终止进程 | |
pkill | pkill nginx | 通过进程名终止 | |
killall | killall nginx | 终止所有同名进程 |
五、实用技巧
-
查找并终止占用端口的服务:
# 查找占用8080端口的PID并终止 sudo kill -9 $(sudo lsof -t -i:8080)
-
查看进程树关系:
pstree -p # 显示进程树结构
-
持续监控网络连接:
watch -n 1 "netstat -tulnp" # 每秒刷新一次
-
查看进程打开的文件:
lsof -p PID # 查看特定进程打开的文件
-
按内存/CPU排序进程:
top -o %MEM # 按内存使用排序 top -o %CPU # 按CPU使用排序
记住,修改系统服务或重要进程前,请确认操作的影响,特别是使用kill -9
强制终止可能导致数据丢失,应优先尝试普通终止方式。