【Linux】/proc文件系统

news2024/9/20 0:53:04

在这里插入图片描述

🔥博客主页: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.coloradmin.cn/o/1537550.html

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

相关文章

程序设计语言与C语言发展

我们今天开始 来讲 C语言 程序设计 首先 我们来看一下 它的课程地位 对于 计算机科学等相关专业 我们这样安排 第一学期 学习 C语言基础 第二学期 学习 C语言程序进阶 第三学期 学习 一门面向对象语言 例如 java c python等 第四学期 学习 数据结果 第五学期 操作系统 最后 学…

【教程】PLSQL查看表属性乱码解决方法

一、前言 PL/SQL是Oracle数据库的编程语言,用于编写存储过程、触发器、函数等。 今天用plsql想查看表的属性,看看各个字段的注释,可是打开一看,居然是乱码的,如下面这样 如果在使用PL/SQL查看表属性时出现乱码&…

(一)基于IDEA的JAVA基础5

Scanner的使用 使用scanner可以接收键盘上输入的数据, Scanner inputnew Scanner(System.in); 导包的方式: 什么是导包,导入的是jdk提供的java开发工具包,我们建一个java文件,psvm快捷输入后,打上new S…

预约陪诊APP定制开发方案以及流程详解

随着医疗行业的快速发展,越来越多的人开始关注自己的健康问题。然而,在看病的过程中,很多人都会感到孤独和无助。为了解决这个问题,许多医疗机构和企业推出了预约陪诊APP,旨在为用户提供一个安全、便捷的陪伴服务。本文将详细介绍…

基于Java的厦门旅游电子商务预订系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒店管理模块2.4 美食管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学生表3.2.3 学生表3.2.4 学生表 四、系统展示五、核心代码5.1 新增景点类型5.2 查询推荐的…

【漏洞复现】金和OA IncentivePlanFulfill.aspx SQL注入漏洞

0x01 产品简介 金和OA协同办公管理系统C6软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效…

基于Springboot的农产品销售管理系统+数据库+免费远程调试

项目介绍: 基于Springboot的农产品销售管理系统。Javaee项目,springboot项目。采用M(model)V(view)C(controller)三层体系结构,通过SpringMvc SpringBootMybatisVuemaven来实现。MyS…

大数据--hdfs--java编程

环境: virtualbox ubantu1604 Linux idea社区版2023 jdk1.8 hadoop相关依赖 使用java操作 1. 判断/user/stu/input/test.txt文件是否存在,存在则读出文件内容,打印在控制台上。反之,输出“文件不存在”。 package abc;impo…

5 线程网格、线程块以及线程(2)

5.3 线程块 即使有512个线程,也不能让你在GPU上斩获颇丰。对很多在CPU上编程的编程人员来说,这似乎是一个很大的数量,但其实在GPU上编程的时候,512个线程并不一定会让你获得很高的效益,对于GPU而言,通常我…

PTA L2-026 小字辈

本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,…

使用阿里CICD流水线打包Java项目到阿里的docker镜像私仓,并自动部署到服务器启动服务

文章目录 使用阿里CICD流水线打包Java项目到阿里的docker镜像私仓,并自动部署到服务器启动服务1、功能原理实现2、将自己的Java项目通过Git上传到阿里的代码仓库中,也可以通过绑定Gitee或者GitHub账号进行导入3、创建自己的阿里云镜像私仓3、进入阿里的C…

【SpringBoot】如何定义接口

定义get接口 使用GetMapping定义一个基本get接口 RestController //表示定义一个json格式返回给前端 public class test {private Map<String,Object> map new HashMap<>();GetMapping(value "/test") //定义接口路径public Object userInfo(Strin…

C语言自定义类型结构体

variable adj.易变的&#xff0c;多变的&#xff1b;时好时坏的&#xff1b;可变的&#xff0c;可调节的&#xff1b; &#xff08;数&#xff09;&#xff08;数字&#xff09;变量的&#xff1b;&#xff08;植&#xff0c;动&#xff09;变异的&#xff0c;变型的&#xff1…

普发Pfeiffer分子泵TPH2101PUP/PCCT安装使用维护说明

普发Pfeiffer分子泵TPH2101PUP/PCCT安装使用维护说明

代码随想录算法训练营第31天| 455.分发饼干、376. 摆动序列、53. 最大子序和

455.分发饼干 题目链接&#xff1a;分发饼干 题目描述&#xff1a;假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最…

FloodFill算法——图像渲染

文章目录 题目解析题目内容解读 算法解析代码解析 题目解析 首先我们先来看看题目&#xff1a;图像渲染 题目内容解读 我们来解读一下题目内容这个题目的意思其实就是有一个如下图所示的二维矩阵 这个题目的意思在这类题目中也是非常标准的&#xff0c;就是给我们一个二维数…

docker的部署与安装以及部署一个docker(容器)应用及docker容器常出现的问题

docker 架构图 一、docker的部署与安装 1、在 CentOS 上安装 Docker 移除旧版本&#xff08;如果有的话&#xff09;&#xff1a;sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-…

用vscode调试cpp程序相关操作记录

需要在服务器上用vscode调试cpp程序&#xff0c;写此记录launch.json配置和相关步骤错误导致的问题 1.在需要运行程序的服务器上安装C/C Extension Pack&#xff08;之前只在本地装了&#xff09;&#xff0c;可以支持调试C/C应用程序(设置断点&#xff0c;单步执行&#xff0c…

爱帮供应链邀您参观2024杭州快递物流供应链与技术装备展览会

2024年7月8-10日 | 杭州国际博览中心 同期举办&#xff1a;2024中国数字物流技术与应用展 2024国际电商物流包装产业展 2024新能源商用车、物流车展 展会介绍 本届展会致力于全面展示快递物流上下游领域的创新解决方案&#xff0c;涵盖快递物流供应链、智能装备、AGV机器人…

正信晟锦:多年不联系的好友借钱怎么办

多年不见的老友突然出现&#xff0c;带着迫切的求助信息——借钱。面对这样的请求&#xff0c;我们该如何应对? 当一个多年未联络的朋友突然出现请求借款时&#xff0c;这确实是一个棘手的问题。一方面&#xff0c;我们可能对旧日友情存有怀念与不舍;另一方面&#xff0c;时间…