Linux proc虚拟文件系统
文章目录
- 简介
- proc常用节点
- pid节点
- procfs接口
- 参考
简介
测试环境:Linux dev-PC 5.18.17-amd64-desktop-hwe #20.01.00.10 SMP PREEMPT_DYNAMIC Thu Jun 15 16:17:50 CST 2023 x86_64 GNU/Linux
proc虚拟文件系统是linux内核提供的一种让用户和内核内部数据结构进行交互的机制。
proc文件系统并不是真正意义上的文件系统,它存在于内存中,并不占用磁盘空间。它包含一些结构化的目录和虚拟文件,向用户呈现内核中的一些信息,也可以作为一种从用户空间向内核发送信息的手段。许多shell命令如ps、top等都是从proc文件系统中读取信息。
在测试环境中,proc文件系统挂载信息如下
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
proc下面的内容:
$ ls /proc
1 1150 1272 1801 25 2708 2855 3257 3489 41 5242 6236 7594 87 acpi fb loadavg slabinfo
10 1151 13 1895 2507 2710 2871 3293 3492 42 5247 6454 76 88 asound filesystems locks softirqs
100 116 14 19 2508 2726 2874 3295 3493 43 5258 6504 7615 89 buddyinfo fs mdstat stat
101 1160 1408 2 2511 275 2898 33 3524 44 5261 6560 7642 9 bus interrupts meminfo swaps
1016 1184 1428 20 2512 276 2904 3331 353 45 5262 6625 7692 90 cgroups iomem misc sys
102 12 1471 2080 2515 2794 3 3346 3534 46 5277 7 77 91 cmdline ioports modules sysrq-trigger
103 1203 1476 21 2581 2796 30 3390 3540 48 53 7035 78 92 consoles irq mounts sysvipc
107 1209 15 22 26 2798 31 3397 3547 49 54 7053 79 93 cpuinfo kallsyms mtrr thread-self
108 1213 1516 229 2632 28 3104 34 36 5 55 72 80 94 crypto kcore net timer_list
11 1218 1595 2395 2673 2803 3125 340 37 50 558 73 81 95 devices keys pagetypeinfo tty
110 122 16 24 2674 2810 32 3419 38 5099 56 74 82 96 diskstats key-users partitions uptime
111 1222 1601 2460 2687 2821 3233 3476 386 51 57 7475 83 97 dma kmsg pressure version
1124 1227 169 2461 2696 2833 3244 3478 39 516 59 7478 84 978 driver kpagecgroup schedstat vmallocinfo
1132 1229 170 2477 2697 2847 3249 3484 4 517 60 7484 85 98 dynamic_debug kpagecount scsi vmstat
1143 123 18 2488 27 2854 3253 3485 40 52 61 75 86 99 execdomains kpageflags self zoneinfo
proc常用节点
- cpuinfo:CPU信息
- meminfo:内存信息
- mounts:加载的文件系统
- filesystems:支持的文件系统
- modules:已加载的模块
- cmdline:系统启动的内核命令行参数
<pid>:提供pid进程的信息- interrupts:中断使用情况
- kmsg:内核日志信息
- devices:可用的设备
- slabinfo:slab系统统计信息
- uptime:系统正常运行时间
pid节点
sudo ls /proc/5261 -lh
总用量 0
-r--r--r-- 1 root root 0 2月 9 11:57 arch_status
dr-xr-xr-x 2 dev dev 0 2月 9 11:57 attr
-r-------- 1 root root 0 2月 9 11:57 auxv
-r--r--r-- 1 root root 0 2月 9 11:57 cgroup
--w------- 1 root root 0 2月 9 11:57 clear_refs
-r--r--r-- 1 root root 0 2月 9 11:39 cmdline
-rw-r--r-- 1 root root 0 2月 9 11:57 comm
-rw-r--r-- 1 root root 0 2月 9 11:57 coredump_filter
-r--r--r-- 1 root root 0 2月 9 11:57 cpu_resctrl_groups
lrwxrwxrwx 1 root root 0 2月 9 11:57 cwd -> /
-r-------- 1 root root 0 2月 9 11:57 environ
lrwxrwxrwx 1 root root 0 2月 9 11:38 exe -> /usr/sbin/sshd
dr-x------ 2 root root 0 2月 9 11:57 fd
dr-xr-xr-x 2 dev dev 0 2月 9 11:57 fdinfo
-rw-r--r-- 1 root root 0 2月 9 11:57 gid_map
-r-------- 1 root root 0 2月 9 11:57 io
-r--r--r-- 1 root root 0 2月 9 11:57 limits
-rw-r--r-- 1 root root 0 2月 9 11:57 loginuid
dr-x------ 2 root root 0 2月 9 11:57 map_files
-r--r--r-- 1 root root 0 2月 9 11:57 maps
-rw------- 1 root root 0 2月 9 11:57 mem
-r--r--r-- 1 root root 0 2月 9 11:57 mountinfo
-r--r--r-- 1 root root 0 2月 9 11:57 mounts
-r-------- 1 root root 0 2月 9 11:57 mountstats
dr-xr-xr-x 60 dev dev 0 2月 9 11:57 net
dr-x--x--x 2 root root 0 2月 9 11:57 ns
-r--r--r-- 1 root root 0 2月 9 11:57 numa_maps
-rw-r--r-- 1 root root 0 2月 9 11:57 oom_adj
-r--r--r-- 1 root root 0 2月 9 11:57 oom_score
-rw-r--r-- 1 root root 0 2月 9 11:57 oom_score_adj
-r-------- 1 root root 0 2月 9 11:57 pagemap
-r-------- 1 root root 0 2月 9 11:57 patch_state
-r-------- 1 root root 0 2月 9 11:57 personality
-rw-r--r-- 1 root root 0 2月 9 11:57 projid_map
lrwxrwxrwx 1 root root 0 2月 9 11:57 root -> /
-rw-r--r-- 1 root root 0 2月 9 11:57 sched
-r--r--r-- 1 root root 0 2月 9 11:57 schedstat
-r--r--r-- 1 root root 0 2月 9 11:57 sessionid
-rw-r--r-- 1 root root 0 2月 9 11:57 setgroups
-r--r--r-- 1 root root 0 2月 9 11:57 smaps
-r--r--r-- 1 root root 0 2月 9 11:57 smaps_rollup
-r-------- 1 root root 0 2月 9 11:57 stack
-r--r--r-- 1 root root 0 2月 9 11:40 stat
-r--r--r-- 1 root root 0 2月 9 11:57 statm
-r--r--r-- 1 root root 0 2月 9 11:39 status
-r-------- 1 root root 0 2月 9 11:57 syscall
dr-xr-xr-x 3 dev dev 0 2月 9 11:57 task
-rw-r--r-- 1 root root 0 2月 9 11:57 timens_offsets
-r--r--r-- 1 root root 0 2月 9 11:57 timers
-rw-rw-rw- 1 root root 0 2月 9 11:57 timerslack_ns
-rw-r--r-- 1 root root 0 2月 9 11:57 uid_map
-r--r--r-- 1 root root 0 2月 9 11:57 wchan
常用信息:
- attr:安全相关属性
- cgroups:进程所属控制组
- cmdline:进程命令行参数
- environ:进程环境变量
- fd:一个包含所有进程打开的文件描述符目录
- mem:进程内存被使用情况
- stat:进程状态
- status:进程当前状态
- cwd:进程当前工作目录的链接
- exe:指向该进程的执行命令文件
- maps:内存映射信息
- statm:进程内存使用信息
- root:链接次进程的root目录
- oom_adj、oom_score、oom_score_adj:用于OOM killer
procfs接口
procfs文件系统提供了一些API供内核中其他模块使用,这些接口或定义在头文件中或通过EXPORT_SYMBOL直接导出,代码位置在fs/proc文件夹下。
下面看下内核中misc驱动是如何使用procfs接口在proc文件系统下面创建和管理自己的节点的。
misc驱动代码位置在drivers/char/misc.c
直接看其的初始化入口:
static int __init misc_init(void)
{int err;struct proc_dir_entry *ret;ret = proc_create_seq("misc", 0, NULL, &misc_seq_ops);err = class_register(&misc_class);if (err)goto fail_remove;err = -EIO;if (register_chrdev(MISC_MAJOR, "misc", &misc_fops))goto fail_printk;return 0;fail_printk:pr_err("unable to get major %d for misc devices\n", MISC_MAJOR);class_unregister(&misc_class);
fail_remove:if (ret)remove_proc_entry("misc", NULL);return err;
}
一开始其就使用了proc_create_seq创建了一个名为misc的节点。
#define proc_create_seq(name, mode, parent, ops) \proc_create_seq_private(name, mode, parent, ops, 0, NULL)struct proc_dir_entry *proc_create_seq_private(const char *name, umode_t mode,struct proc_dir_entry *parent, const struct seq_operations *ops,unsigned int state_size, void *data)
{struct proc_dir_entry *p;p = proc_create_reg(name, mode, &parent, data);if (!p)return NULL;p->proc_ops = &proc_seq_ops;p->seq_ops = ops;p->state_size = state_size;return proc_register(parent, p);
}
EXPORT_SYMBOL(proc_create_seq_private);
其中misc_seq_ops是该文件节点的操作函数集,目前统一为seq_file机制:
static const struct seq_operations misc_seq_ops = {.start = misc_seq_start,.next = misc_seq_next,.stop = misc_seq_stop,.show = misc_seq_show,
};
关于seq_file机制,可以参考相关文档:The seq_file Interface、内核 seq_file 操作函数、linux内核seq_file接口
下面是读取misc节点:
$ cat /proc/misc
119 simple_virtualchardev
232 kvm
130 watchdog
235 autofs
234 btrfs-control
120 cpu_dma_latency
227 mcelog
121 vndbinder
122 hwbinder
123 binder
124 ashmem
236 device-mapper
223 uinput1 psaux
196 vfio
200 tun
125 udmabuf
237 loop-control
228 hpet
229 fuse
126 ecryptfs
231 snapshot
183 hw_random
127 vga_arbiter
242 rfkill
参考
The /proc Filesystem
T H E /proc F I L E S Y S T E M
The seq_file Interface
内核 seq_file 操作函数
linux内核seq_file接口
相关文章:
Linux proc虚拟文件系统
文章目录 简介proc常用节点pid节点procfs接口参考 简介 测试环境:Linux dev-PC 5.18.17-amd64-desktop-hwe #20.01.00.10 SMP PREEMPT_DYNAMIC Thu Jun 15 16:17:50 CST 2023 x86_64 GNU/Linux proc虚拟文件系统是linux内核提供的一种让用户和内核内部数据结构进行交…...
idea整合deepseek实现AI辅助编程
1.File->Settings 2.安装插件codegpt 3.注册deepseek开发者账号,DeepSeek开放平台 4.按下图指示创建API KEY 5.回到idea配置api信息,File->Settings->Tools->CodeGPT->Providers->Custom OpenAI API key填写deepseek的api key Chat…...
局域网内别的电脑怎么连接到对方的mysql数据库
要让局域网内的其他电脑连接到一台主机上的 MySQL 数据库,你需要进行一些配置,包括 MySQL 服务器的设置、权限调整,以及客户端连接的步骤。以下是详细的步骤说明: 1. 确保 MySQL 服务器允许远程连接 默认情况下,MySQL 服务器可能只允许本地连接(localhost)。你需要修改…...
加速汽车软件升级——堆栈刷写技术的应用与挑战
一、背景和挑战 | 背景: 当前汽车市场竞争激烈,多品牌并存,新车发布速度加快,价格逐渐降低,功能日益多样化。随着车辆功能的不断提升与优化,ECU(电子控制单元)的代码量也随之增加&…...
2. UVM的基本概念和架构
文章目录 前言1. UVM的基本概念1.1 UVM的核心组件1.2 UVM的基本架构1.3 UVM的工作流程 2. UVM的架构2.1 UVM的层次结构2.2 UVM的组件交互 3. 总结 前言 首先,得确定UVM的基本概念和架构包含哪些关键部分。我回忆起UVM的核心组件,比如uvm_component、uvm…...
【力扣】138.随机链表的复制
AC截图 题目 代码 使用哈希存储<旧节点,新结点> /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val _val;next NULL;random NULL;} }; */class Solution { public:Node* copyRandomList(Node* hea…...
防火墙、堡垒机和NAT
在网络安全中,防火墙、堡垒机(Cloud Monitoring and Protection Machine)和网络地址转换(NAT) 是三种核心设备,用于防御外来的访问和破坏性攻击。然而,这三种设备本身也可能面临多种网络安全威胁…...
归一化与伪彩:LabVIEW图像处理的区别
在LabVIEW的图像处理领域,归一化(Normalization)和伪彩(Pseudo-coloring)是两个不同的概念,虽然它们都涉及图像像素值的调整,但目的和实现方式截然不同。归一化用于调整像素值的范围,…...
动态表格html
题目: 要求: 1.表格由专业班级学号1-10号同学的信息组成,包括:学号、姓 名、性别、二级学院、班级、专业、辅导员; 2.表格的奇数行字体为黑色,底色为白色;偶数行字体为白色,底 色为黑…...
通过k8s请求selfsubjectrulesreviews查询权限
当前是通过kubelet进行查询 curl --cacert /etc/kubernetes/pki/ca.crt \ --cert /var/lib/kubelet/pki/kubelet-client-current.pem \ --key /var/lib/kubelet/pki/kubelet-client-current.pem \ -d - \ -H "Content-Type: application/json" \ -H Accept: applicat…...
Leetcode 3447. Assign Elements to Groups with Constraints
Leetcode 3447. Assign Elements to Groups with Constraints 1. 解题思路2. 代码实现 题目链接:3447. Assign Elements to Groups with Constraints 1. 解题思路 这一题的话思路上我是预先算出可能数字对应的element,然后只要一次query就行了。 而至…...
Ollama + AnythingLLM + Deepseek r1 实现本地知识库
1、Ollama:是一个开源的大型语言模型 (LLM)服务工具,旨在简化在本地运行大语言模型的过程,降低使用大语言模型的门槛。 2、AnythingLLM:是由Mintplex Labs Inc. 开发的一款全栈应用程序,旨在构建一个高效、可定制、…...
Prompt逆向工程:如何“骗“大模型吐露其Prompt?
提示词的“逆向工程”,让AI大语言模型帮你反推提示词 一、前言 在日常生活中,我们不时会遇到一些令人惊艳的文本,不论是一篇精彩绝伦的小说、一篇深入浅出的科普文章,还是一篇充满热情的音乐推荐,它们都能在我们的心…...
Deepseek-v3 / Dify api接入飞书机器人go程序
准备工作 开通了接收消息权限的飞书机器人,例如我希望用户跟飞书机器人私聊,就需要开通这个权限:读取用户发给机器人的单聊消息 im:message.p2p_msg:readonly准备好飞书机器人的API key 和Secretdeepseek-v3的api keysecret:http…...
【docker】Failed to allocate manager object, freezing:兼容兼容 cgroup v1 和 v2
参考大神让系统同时兼容 cgroup v1 和 v2 要解决你系统中只挂载了 cgroup v2 但需要兼容 cgroup v1 的问题,可以通过以下几步来使系统同时兼容 cgroup v1 和 cgroup v2。这样 Docker 和其他服务就可以正常工作了。步骤 1:更新 Grub 配置,启用兼容模式 编辑 GRUB 配置来启用同…...
详解策略模式
引言 实现一个目标往往有多种方式,比如从上海到北京,可以选择高铁、火车、飞机、自驾等等。同样实现一个功能我们可能也有多种方法,把这些方法封装为算法,根据不同的需求选择不同的算法(策略),让…...
2025影视泛目录站群程序设计_源码二次开发新版本无缓存刷新不变实现原理
1. 引言 本设站群程序计书旨在详细阐述苹果CMS泛目录的创新设计与实现,介绍无缓存刷新技术、数据统一化、局部URL控制及性能优化等核心功能,以提升网站访问速度和用户体验。 2. 技术概述 2.1 无缓存刷新技术 功能特点: 内容不变性&#x…...
【RabbitMQ】RabbitMQ的下载安装及使用
安装RabbitMQ 下载网站:https://www.rabbitmq.com/docs/install-windows 点击后,会直接定位到依赖介绍位置,告诉你需要安装Erlang 下载Erlang Erlang也是一种编程语言,只是比较小众,但其拥有极为出色的性能 这个网站是…...
Stylelint 如何处理 CSS 预处理器
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
Word中Ctrl+V粘贴报错问题
Word中CtrlV粘贴时显示“文件未找到:MathPage.WLL”的问题 Word的功能栏中有MathType,但无法使用,显示灰色。 解决方法如下: 首先找到MathType安装目录下MathPage.wll文件以及MathType Commands 2016.dotm文件,分别复…...
jmeter逻辑控制器9
1,简单控制器2,录制控制器3,循环控制器4,随机控制器5,随机顺序控制器6,if控制器7,模块控制器8,Include控制器9,事物控制器本文永久更新地址: 1,简单控制器 不…...
uniapp mqttjs 小程序开发
在UniApp中集成MQTT.js开发微信小程序时,需注意平台差异、协议兼容性及消息处理等问题。以下是关键步骤与注意事项的综合指南: 一、环境配置与依赖安装 安装MQTT.js 推荐使用兼容性较好的版本:mqtt4.1.0(H5和小程序兼容性最佳&…...
GitHub Copilot Agent 模式系统提示词
系统提示词 你是一名 AI 编程助手。 当被问及你的名字时,你必须回答“GitHub Copilot”。请严格且完整地遵循用户的要求。 遵守微软内容政策。 避免涉及侵犯版权的内容。如果有人要求你生成有害、仇恨、种族主义、性别歧视、淫秽、暴力或与软件工程完全无关的内容&…...
【设计模式】【行为型模式】模板方法模式(Template Method)
👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 📫 欢迎V: flzjcsg2,我们共同讨论Java深渊的奥秘 …...
w200基于spring boot的个人博客系统的设计与实现
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...
React 生命周期函数详解
React 组件在其生命周期中有多个阶段,每个阶段都有特定的生命周期函数(Lifecycle Methods)。这些函数允许你在组件的不同阶段执行特定的操作。以下是 React 组件生命周期的主要阶段及其对应的生命周期函数,并结合了 React 16.3 的…...
docker grafana安装
mkdir /root/grafana-storage chmod 777 -R /root/grafana-storage docker run -d -p 3000:3000 --namedocker-apisix-grafana-1 --network docker-apisix_apisix -v /root/grafana-storage:/var/lib/grafana grafana/grafana:9.1.0 浏览器访问: http://192.…...
H5+CSS+JS制作好看的轮播图
先来看效果 点击下方按钮可以做到平滑切换轮播,轮播图片可以根据自定义随心变化。 先来看一下页面代码结构 <div class"container"><div class"lunbo-wrap"><div id"slide"></div><div class"butto…...
aio-pika 快速上手(Python 异步 RabbitMQ 客户端)
目录 简介官方文档如何使用 简介 aio-pika 是一个 Python 异步 RabbitMQ 客户端。5.0.0 以前 aio-pika 基于 pika 进行封装,5.0.0 及以后使用 aiormq 进行封装。 https://github.com/mosquito/aio-pikahttps://pypi.org/project/aio-pika/ pip install aio-pika官…...
表单与交互:HTML表单标签全面解析
目录 前言 一.HTML表单的基本结构 基本结构 示例 二.常用表单控件 文本输入框 选择控件 文件上传 按钮 综合案例 三.标签的作用 四.注意事项 前言 HTML(超文本标记语言)是构建网页的基础,其中表单(<form>&…...
