【Linux】/proc文件系统

在这里插入图片描述

🔥博客主页:PannLZ

😘欢迎关注:👍点赞🙌收藏✍️留言

文章目录

      • /proc文件系统
          • 1.获取与进程相关的信息:/proc/ID
          • 2./proc 目录下的系统信息
          • 3. 访问/proc 文件
          • 4.动态创建`/proc`文件系统
            • 4.1创建目录
            • 4.2创建proc文件
            • 4.3删除proc文件/目录:
            • 4.4proc文件读回调函数
            • 4.5proc文件写回调函数
          • 参考资料:


/proc文件系统

为了提供更为简便的方法来访问内核信息,许多现代 UNIX 实现提供了一个**/proc 虚拟文件系统**。该文件系统驻留于/proc 目录中,包含了各种用于展示内核信息的文件,并且允许进程通过常规文件 I/O 系统调用来方便地读取,有时还可以修改这些信息。

之所以将/proc 文件系统称为虚拟,是因为其包含的文件和子目录并未存储于磁盘上,而是由内核在进程访问此类信息时动态创建而成

1.获取与进程相关的信息:/proc/ID

对于系统中每个进程,内核都提供了相应的目录,命名为/proc/PID,其中 PID 是进程的 ID。在此目录中的各种文件和子目录包含了进程的相关信息。例如,通过查看/proc/1 目录下的文件,可以获取piid为1的进程的信息

每个/proc/PID 目录中都存在一个命名为 status 的文件,提供了有关该进程的一系列信息。

在这里插入图片描述

在每个/proc/PID 目录中的部分其他文件:

文件描述(进程属性)
cmdline以\0 分隔的命令行参数
cwd指向当前工作目录的符号链接
EnvironNAME=value 键值对环境列表,以\0 分隔
exe指向正在执行文件的符号链接
fd文件目录,包含了指向由进程打开文件的符号链接
maps内存映射
mem进程虚拟内存(在 I/O 操作之前必须调用 lseek()移至有效偏移量)
mounts进程的安装点
root指向根目录的符号链接
status各种信息(比如,进程 ID、凭证、内存使用量、信号)
task为进程中的每个线程均包含一个子目录(始自 Linux 2.6)
2./proc 目录下的系统信息

/proc 目录下的各种文件和子目录提供了对系统级信息的访问。

在这里插入图片描述

节选/proc 子目录的用途:

目 录目录中文件表达的信息
/proc各种系统信息
/proc/net有关网络和套接字的状态信息
/proc/sys/fs文件系统相关设置
/proc/sys/kernel各种常规的内核设置
/proc/sys/net网络和套接字的设置
/proc/sys/vm内存管理设置
/proc/sysvipc有关 System V IPC 对象的信息
3. 访问/proc 文件

通常使用 shell 脚本来访问/proc 目录下的文件(使用诸如 Python 或者 Perl 之类的脚本语言,很容易解析大多数/proc 目录下包含有多个值的文件)。例如,使用 shell命令echo和cat就可修改和查看.proc目录文件下内容。

也可以从程序中使用常规 I/O 系统调用来访问/proc 目录下的文件。但在访问这些文件时, 有如下一些限制。

  • /proc 目录下的一些文件是只读的,即这些文件仅用于显示内核信息,但无法对其进行 修改。/proc/PID 目录下的大多数文件就属于此类型。
  • /proc 目录下的一些文件仅能由文件拥有者(或特权级进程)读取。例如,/proc/PID 目录下的所有文件都属于拥有相应进程的用户,而且即使是对文件的属主,其中的部 分文件(如:proc/PID/environ 文件)也仅仅授予了读权限。
  • 除了/proc/PID 子目录中的文件,/proc 目录的其他文件大多属于 root 用户,并且也仅 有 root 用户能够修改那些可修改的文件。

访问/proc/PID目录中的文件

**/proc/PID 目录内容变化不定。每个目录随着含有相应进程 ID 的进程创建而生,又随进程 的终止而灭。**这意味着要确定特定/proc/PID 目录的存在,就需要干净利落地处理如下可能性: 当打开此目录下的文件时,进程已经终止,并且也已经删除了相应的/proc/PID 目录。

4.动态创建/proc文件系统
4.1创建目录
struct proc_dir_entry *proc_mkdir(const char *name,  struct proc_dir_entry *parent);  
//当parent为null时即创建根目录
4.2创建proc文件
struct proc_dir_entry *create_proc_entry( const char *name,  mode_t mode,  struct proc_dir_entry *parent ); 

create_proc_entry函数用于创建一个一般的proc文件,其中

name是文件名

parent是要创建的proc文件的父目录(若parent = NULL则创建在/proc目录下)

create_proc_entry 的返回值是一个 proc_dir_entry 指针(或者为 NULL,说明在 create 时发生了错误)可以使用这个返回的指针来配置这个虚拟文件的其他参数,例如在对该文件执行读操作时应该调用的函数:

struct proc_dir_entry {  ......  const struct file_operations *proc_fops;    //文件操作结构体  struct proc_dir_entry *next, *parent, *subdir;  void *data;  read_proc_t *read_proc;                    //读回调  write_proc_t *write_proc;                  //写回调  ......  
}; 
4.3删除proc文件/目录:
void remove_dir_entry(const char *name, struct proc_dir_entry *parent);  
4.4proc文件读回调函数
static int (*proc_read)(char *page, char **start, off_t off, int count, int *eof, void *data)
4.5proc文件写回调函数
static int proc_write_foobar(struct file *file, const char *buffer, unsigned long count, void *data);
参考资料:

《Linux-UNIX系统编程手册(上、下)》

Linux内核通信之—proc文件系统(详解) - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双点双向路由引入实验

双点双向路由引入实验 1、OSPF和ISIS路由协议的优先级分别是什么:OSPF:10,150,ISIS:15,15 2、加表原则:当不同的路由协议学习到相同的目的网络,比较优先级,优先级数值小…

普发Pfeiffer分子泵TMH-U1001PC-1601PC安装使用维护说明

普发Pfeiffer分子泵TMH-U1001PC-1601PC安装使用维护说明

2024年【化工自动化控制仪表】考试试卷及化工自动化控制仪表模拟考试题

题库来源:安全生产模拟考试一点通公众号小程序 化工自动化控制仪表考试试卷是安全生产模拟考试一点通总题库中生成的一套化工自动化控制仪表模拟考试题,安全生产模拟考试一点通上化工自动化控制仪表作业手机同步练习。2024年【化工自动化控制仪表】考试…

Java 模拟Spring,实现IOC和AOP的核心(一)

在这里我要实现的是Spring的IOC和AOP的核心,而且有关IOC的实现,注解XML能混合使用! 参考资料: IOC:控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种…

Java项目:70 ssm小学生课外知识学习网站+vue

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 管理员;首页、个人中心、医护人员管理、科室管理、病人管理、病房管理、病人信息管理、病历管理、医嘱管理、手术安排管理、药品信…

2024-3-17上机C++刷题

题目一: 反序数_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/e0d06e79efa44785be5b2ec6e66ba898?tpId60&tqId31035&tPage2&ru/kaoyan/retest/1001&qru/ta/tsing-kaoyan/question-ranking #include<iostream> using namespace s…

进度图画法

exce表格进度图画法&#xff0c;体现在条形图以及“格子”的空间的填充两种办法。 1.excel表格画进度图 备注&#xff1a;表格照着就是可以了&#xff0c;主要是画直线的办法 在形状的下拉菜单中选择直线&#xff0c;按住shift&#xff08;可以画直线&#xff09; 画直线后&a…

【数据结构与算法】(18):树形选择排序:按照锦标赛的思想进行排序

&#x1f921;博客主页&#xff1a;Code_文晓 &#x1f970;本文专栏&#xff1a;数据结构与算法 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多数据结构与算法点击专栏链接查看&…

【系统架构师】-计算机网络

1、网络的划分 网络性能指标&#xff1a;速率、带宽(频带宽度或传送线路速率)、吞吐量、时延、往返时间、利用率。 网络非性能指标&#xff1a;费用、质量、标准化、可靠性、可扩展性、可升级性、易管理性和可维护性。 总线型(利用率低、干扰大、价格低)、 星型(交换机转发形…

【并查集专题】【蓝桥杯备考训练】:网络分析、奶酪、合并集合、连通块中点的数量、格子游戏【已更新完成】

目录 1、网络分析&#xff08;第十一届蓝桥杯省赛第一场C A组/B组&#xff09; 2、奶酪&#xff08;NOIP2017提高组&#xff09; 3、合并集合&#xff08;模板&#xff09; 4、连通块中点的数量&#xff08;模板&#xff09; 5、格子游戏&#xff08;《信息学奥赛一本通》…

flink1.18.0报错 an implicit exists from scala.Int => java.lang.Integer, but

完整报错 type mismatch;found : Int(100)required: Object Note: an implicit exists from scala.Int > java.lang.Integer, but methods inherited from Object are rendered ambiguous. This is to avoid a blanket implicit which would convert any scala.Int to a…

【Java反序列化】CommonsCollections-CC1链分析

前言 好几天没发博文了&#xff0c;偷偷憋了个大的——CC1链分析&#xff0c;手撸了一遍代码。虽然说&#xff0c;这个链很老了&#xff0c;但还是花费了我一段时间去消化吸收&#xff0c;那么接下来&#xff0c;我会简洁的介绍下整个链的利用过程&#xff0c;还有哪些不理解的…

初识C++(一)

目录 一、什么是C 二、关键字&#xff1a; 三、命名空间 &#xff1a; 1. C语言存在的问题&#xff1a; 2. namespace关键字&#xff1a; 3. 注意点&#xff1a; 4.使用命名空间分为三种&#xff1a; 四、输入输出&#xff1a; 五、缺省函数&#xff1a; 1. 什么是缺省…

【Linux】进程地址空间——有这篇就够了

前言 在我们学习C语言或者C时肯定都听过老师讲过地址的概念而且老师肯定还会讲栈区、堆区等区域的概念&#xff0c;那么这个地址是指的物理内存地址吗&#xff1f;这里这些区域又是如何划分的呢&#xff1f; 我们在使用C语言的malloc或者C的new函数开辟空间时&#xff0c;开辟…

栈——数据结构——day4

栈的定义 栈是限定仅在一段进行插入和删除操作的线性表。 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表&#xff0c;简称LIFO结构。 栈的插入操作&#xff0c;叫作进栈&#…

【收藏】什么是API测试?这是我见过的最全的测试指南!

在最近的部署中&#xff0c;当我被问到“什么是API测试&#xff1f;”时&#xff0c;我正与客户一起制定API测试策略。那时我突然意识到&#xff0c;要描述API测试居然是一件如此具有挑战性的事情&#xff0c;即使你如实地描述了它&#xff0c;也往往听起来很无聊和复杂。 好吧…

第十二届蓝桥杯省赛CC++ 研究生组

十二届省赛题 第十二届蓝桥杯省赛C&C 研究生组-卡片 第十二届蓝桥杯省赛C&C 研究生组-直线 第十二届蓝桥杯省赛C&C 研究生组-货物摆放 第十二届蓝桥杯省赛C&C 研究生组-路径 第十二届蓝桥杯省赛C&C 研究生组-时间显示 第十二届蓝桥杯省赛C&C 研究生组…

AI PPT生成工具 V1.0.0

AI PPT是一款高效快速的PPT生成工具&#xff0c;能够一键生成符合相关主题的PPT文件&#xff0c;大大提高工作效率。生成的PPT内容专业、细致、实用。 软件特点 免费无广告&#xff0c;简单易用&#xff0c;快速高效&#xff0c;提高工作效率 一键生成相关主题的标题、大纲、…

TCP | TCP协议格式 | 三次握手

1.TCP协议 为什么需要 TCP 协议 &#xff1f;TCP 工作在哪一层&#xff1f; IP网络层是不可靠的&#xff0c;TCP工作在传输层&#xff0c;保证数据传输的可靠性。 TCP全称为 “传输控制协议&#xff08;Transmission Control Protocol”&#xff09;。 TCP 是面向连接的、可靠…

YOLOV9训练自己的数据集

1.代码下载地址GitHub - WongKinYiu/yolov9: Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information 2.准备自己的数据集 这里数据集我以SAR数据集为例 具体的下载链接如下所示&#xff1a; 链接&#xff1a;https:/…