在Linux系统中,ss
(Socket Statistics)命令是查看网络连接信息的强大工具,可替代传统的netstat
,要查看与网络连接关联的进程号(PID),需使用-p
或--processes
参数,以下是详细操作指南:
ss -tunap
- 参数解析:
-t
:显示TCP连接-u
:显示UDP连接-n
:以数字形式显示IP/端口(不解析域名)-a
:显示所有连接(含监听/非监听)-p
:关键参数,显示进程信息(PID和进程名)
操作示例
查看所有TCP/UDP连接的进程号
ss -tunap
输出示例:
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 ESTAB 0 0 192.168.1.10:443 203.0.113.5:5678 users:(("nginx",pid=5678,fd=15))
- 进程号位置:
在users:((进程名,pid=PID,fd=文件描述符))
中提取pid=
后的数字(如pid=1234
)。
筛选特定端口的进程号
案例:查看占用80端口的进程
ss -tunap sport = :80
sport = :80
:筛选源端口为80的连接- 输出中直接读取
pid=
后的值。
提取纯进程号列表
通过管道组合命令提取PID:
ss -tunap | awk '/users:/ {split($7,a,"[,=]"); print a[3]}'
- 原理:
awk
截取包含users:
的行,分割第7列字符串,提取pid=
后的数字。
注意事项
-
权限要求:
普通用户仅能查看自身进程,需sudo
查看系统级进程:sudo ss -tunap
-
输出字段差异:
部分系统版本中进程信息可能位于第6列(非第7列),需根据实际输出调整awk
列号。 -
过滤无用信息:
添加grep -v "pid=0"
排除内核进程(PID=0)。
应用场景
- 诊断端口冲突:定位占用端口的进程并终止:
sudo ss -tunap sport = :80 | awk -F'pid=' '{print $2}' | cut -d, -f1
- 监控服务状态:验证Web服务器、数据库等进程的网络活动。
引用说明基于以下权威来源:
- Linux
ss
手册页(man ss
) - IPRoute2官方文档(https://wiki.linuxfoundation.org/networking/iproute2)
- Linux网络管理工具指南(《Linux Advanced Routing & Traffic Control》)
提示:命令兼容主流Linux发行版(CentOS/Ubuntu/Debian等),输出格式以实际环境为准。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6345.html