【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.mfbz.cn/a/479953.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【回溯专题part1】【蓝桥杯备考训练】:n-皇后问题、木棒、飞机降落【已更新完成】

目录 1、n-皇后问题(回溯模板) 2、木棒(《算法竞赛进阶指南》、UVA307) 3、飞机降落(第十四届蓝桥杯省赛C B组) 1、n-皇后问题(回溯模板) n皇后问题是指将 n 个皇后放在 nn 的国…

通过Anaconda安装Python会得到的重要文件夹

E:\Anaconda\路径下 Scripts 文件夹:该文件夹包含了可执行的Python脚本文件,例如pip和conda等命令行工具。【pip3.exe和django-admin.exe等】Lib 文件夹:该文件夹包含了Python的标准库和其他第三方库的源代码文件。【Lib下面的site-packages…

农业四情监测系统的工作原理

农业四情监测系统的工作原理【TH-Q1】农业四情监测系统是一种应用现代科技手段,以实现对农田环境信息的实时监测和数据采集的系统。这一系统通过对农田的土壤、气象、病虫害以及作物生长状况等四个方面的实时监测,帮助农民和农业管理者更好地了解和掌握农…

力扣● 503.下一个更大元素II ● 42. 接雨水

503.下一个更大元素II 与496.下一个更大元素 I的不同是要循环地搜索元素的下一个更大的数。那么主要是对于遍历结束后,单调栈里面剩下的那些元素。 如果直接把两个数组拼接在一起,然后使用单调栈求下一个最大值就可以。 代码实现的话,不用直…

电脑笔记软件与桌面备忘录的高效设置指南

在数字化生活的大潮中,电脑笔记软件和桌面备忘录已成为我们日常信息管理与时间规划的重要载体。它们犹如你的私人智囊团,随时随地帮你记录灵感、整理思路、规划任务。本文将深度解析电脑笔记软件的多元功能,并手把手教你如何设置实用的电脑桌…

Kotlin函数进阶玩法

公众号「稀有猿诉」 原文链接 More about Kotlin Functions Kotlin中的函数是一级对象,除了常规的函数式编程以外,还支持一些非常灵活的特殊用法,可以大大增强代码的可读性和简洁性,让代码更加的优雅,在业界顶级…

第6讲-MIPS处理器(3)MIPS单周期处理器设计

三. MIPS单周期处理器设计 1.单周期数据通路设计 2.单周期控制器设计 3.单周期性能分析

阿里云服务器ECS经济型e实例2核2G优惠价格99元一年性能测试

阿里云服务器99元一年配置为云服务器ECS经济型e实例,2核2G配置、3M固定带宽和40G ESSD Entry系统盘,新用户和老用户均可买,续费不涨价依旧是99元一年,阿里云服务器网aliyunfuwuqi.com来详细说下阿里云99元服务器性能测评&#xff…

碳素光线疗法——动,植物 光育实验

碳素光线疗法——动,植物 光育实验 碳素光线疗法: 中西医、民间疗法融为一体,提高机体自身治愈力,免疫力,改善体质和保持健康,有助于疾病的预防和治疗的疗法。不吃药、不打针、不手术也能得健康&#xff0c…

HCIP的学习(3)

网络类型及数据链路层协议 网络类型分类 P2P网络----点到点网络类型MA网络-----多点接入网络 BMA----广播型多点接入网络NBMA—非广播型多点接入网络(快淘汰了) 数据链路层协议 MA网络 以太网协议 特点:需要使用MAC地址对设备进行区分…

经济事件对我们投资没影响吗?昂首资本的这两个实例说明白再说

各位投资者现在还不明白经济事件对我们投资的影响吗?下面昂首资本就通过两个实例,各位投资者能否明白经济事件对我们投资的影响。 2015年6月4日,澳大利亚零售量新闻发布。分析师预计销量增幅高达0.4%,但是结果却大吃一惊&#xf…

第四百一十七回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义标题栏"相关的内容,本章回中将介绍自定义Action菜单.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里提到的…

【代码学习】Mediapipe人脸检测使用记录

Mediapipe,每秒200-300帧的实时人脸检测,提取画面中的人脸框,实现后续各种应用:人脸属性识别、表情识别、关键点检测、三维重建、增强现实、AI换妆等 code:google/mediapipe: Cross-platform, customizable ML soluti…

【NLP】从变形金刚到Transfomer 01

Transformer是一种非常强大的模型,在自然语言处理(NLP)领域里引起了一场革命。 "从变形金刚到技术革命家,Transformer不再仅是儿时屏幕上的英雄。🤖✨ 在今天的AI领域,它变身成为自然语言处理的超级英…

MySQL数据库存储引擎MyISAM与InnoDB

前言 MySQL存储引擎是MySQL数据库中负责管理数据存储和检索的组件,不同的存储引擎提供了不同的功能和特性,可以根据实际需求选择合适的存储引擎来优化数据库性能和功能。以下是一些常见的MySQL存储引擎:InnoDB、MyISAM、MEMORY、NDB Cluster…

论文阅读-MIPD:一种用于分布式深度神经网络训练的自适应梯度稀疏化框架

摘要—基于参数服务器架构的异步训练广泛应用于大规模数据集和深度神经网络模型的扩展训练。在大规模分布式深度学习系统中,通信一直被认为是主要瓶颈。最近的研究尝试通过梯度稀疏化和量化方法来减少通信流量。我们发现前期研究存在三个限制。首先,他们…

【基础+进阶】Midjourney订阅看这一篇就够了!Midjourney进阶关键词用法!Midjourney常见问题!

Midjourney进阶关键词用法 1.风格 设计/流派 可以使用一些关键词作为设计流派风格,例如standard,Japanese anime style,Pixar movie style,cyber punk style等 艺术家的姓名 可以使用一些艺术家的姓名作为风格,例如Andy Warhol,Da Vinci等 渲染/照明…

​浅析多模态大模型技术路线梳理

前段时间 ChatGPT 进行了一轮重大更新:多模态上线,能说话,会看图!微软发了一篇长达 166 页的 GPT-4V 测评论文,一时间又带起了一阵多模态的热议,随后像是 LLaVA-1.5、CogVLM、MiniGPT-5 等研究工作紧随其后…

【系统架构师】-第6章-数据库设计基础知识

1、三级模式-两级映像 外模式:视图、用户与数据库的接口 概念模式:表 内模式:存储方式,索引创建等 1)外模式-模式映射: 视图与表的映射,表数据发生修改,只需要修改映射&#xf…

探索ChatGPT时代下的下一代信息检索系统:机遇与挑战

1 Introduction 2022 年 11 月 30 日,OpenAI 推出了 ChatGPT,这是一款由先进的 GPT3.5 和更高版本的 GPT-4 生成语言模型提供支持的 AI 聊天机器人应用程序。该应用迅速吸引了全球超亿用户,创下了产品快速传播的新纪录。 它能够以对话的方式…