linux ss源码学习

进程名、pid的获取及存储

当执行ss -p命令时,会返回进程的名称、pid信息,接下来就分析一下该信息是如何获取及存储的

获取

1、
这里写图片描述

当指定p参数时, 会将全局变量show_users进行++操作,之后会执行user_ent_hash_build()函数。

2、
这里写图片描述

该函数第一步首先获取环境变量PROC_ROOT的值,若为空,则默认路径为/proc/目录

3、
这里写图片描述

之后读取/proc/pid/stat文件,其中pid指代的是进程的pid

4、
这里写图片描述

读取文件中括号部分的内容,该内容即为进程名称

存储

1、
这里写图片描述

采用的是hash存储的方式,以进程的socket索引进行地址
寻址,存储进程名、pid等信息,如果地址冲突,则使用链表的形式进行解决

使用

这里写图片描述

若指定了-P参数,则show_users为1,则进入find_users函数从hash表中获取数据

这里写图片描述

首先通过socket索引获取hash地址,接着判断获取数据

socket索引的获取方式

这里写图片描述

进入/proc/进程号/fd目录,进行扫描

这里写图片描述

黄线部分即为socket索引
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐