Linux:虚拟文件系统/proc和self进程

相关阅读

Linuxicon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm=1001.2014.3001.5482


/proc目录

        在Linux操作系统中,目录/proc是一个虚拟文件系统,称为procfc,用于访问内核和系统的实时状态信息。这个文件系统不同于常规文件系统,因为它并不存储在磁盘上,而是动态生成的。它的内容反映了当前系统的内核状态和运行中的进程信息,主要用于系统管理和调试。

        每个正在运行的进程,都会在目录/proc下用一个子目录表示,目录名为进程的id号,例如,子目录/proc/1234会包含id号为1234的进程的相关信息。当一个进程创建时,操作系统会为其分配一个未使用的id号并在目录/proc下创建相应的目录;当一个进程执行完毕退出时,操作系统会删除相应的目录并回收id号。

        例1已一个后台运行的sleep命令说明了上述过程。

# 例1
[zhangchen@EDA ~]$ sleep 10 & # 一个后台执行的测试命令
[1] 4533
[zhangchen@EDA ~]$ ls -al /proc
***
dr-xr-xr-x. 9 zhangchen zhangchen 0 Sep 20 20:27 4533
***
# 等待10秒后
[zhangchen@EDA ~]$ ls -al /proc/4533
ls: cannot access /proc/4533: No such file or directory

        在sleep命令执行后,目录/proc下多出了一个名为4533的子目录,而在10秒后sleep命令执行完毕,此时名为4533的子目录消失了(前提是此时操作系统没有将id号4533其分配给其他进程)。

        例2展示了使用ls命令来显示Bash进程目录下的内容以及它们的简介。

# 例2
[zhangchen@EDA ~]$ ps # 查询Bash进程的id号PID TTY          TIME CMD4934 pts/0    00:00:00 bash6192 pts/0    00:00:00 ps
[zhangchen@EDA ~]$ ls -al /proc/4934 # 显示虚拟文件系统中Bash进程目录
total 0
dr-xr-xr-x.   9 zhangchen zhangchen 0 Sep 20 20:30 .
dr-xr-xr-x. 385 root      root      0 Sep 20 20:22 ..
dr-xr-xr-x.   2 zhangchen zhangchen 0 Sep 20 20:37 attr # 包含与进程相关的属性(如安全属性)
-rw-r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 autogroup # 显示进程的自动调度组信息,用于CPU调度优化
-r--------.   1 zhangchen zhangchen 0 Sep 20 20:37 auxv # 包含传递给进程的辅助向量,描述了进程运行时的环境
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 cgroup # 显示该进程所属的控制组(cgroup),用于资源控制
--w-------.   1 zhangchen zhangchen 0 Sep 20 20:37 clear_refs # 用于清除内存页的引用计数,主要用于内存分析
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:30 cmdline # 包含进程启动时的命令行参数
-rw-r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 comm # 显示进程的简短名称(通常是执行的命令名)
-rw-r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 coredump_filter # 控制生成核心转储时包含的内存段
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 cpuset # 显示进程的CPU集设置,用于控制该进程在哪些CPU上运行
lrwxrwxrwx.   1 zhangchen zhangchen 0 Sep 20 20:37 cwd -> /home/zhangchen # 一个指向该进程的当前工作目录的符号链接
-r--------.   1 zhangchen zhangchen 0 Sep 20 20:37 environ # 包含进程的环境变量信息
lrwxrwxrwx.   1 zhangchen zhangchen 0 Sep 20 20:30 exe -> /usr/bin/bash # 一个指向正在执行的可执行文件的路径
dr-x------.   2 zhangchen zhangchen 0 Sep 20 20:30 fd # 包含进程打开的文件描述符的符号链接,指向相应的资源
dr-x------.   2 zhangchen zhangchen 0 Sep 20 20:37 fdinfo # 目录提供与文件描述符相关的详细信息
-rw-r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 gid_map # 显示进程的组ID映射,用于用户命名空间
-r--------.   1 zhangchen zhangchen 0 Sep 20 20:37 io # 显示与该进程相关的I/O统计信息,例如读取和写入的字节数
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 limits # 包含该进程的资源限制(如文件大小、内存限制等)
-rw-r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 loginuid # 显示登录用户的UID,用于审计
dr-x------.   2 zhangchen zhangchen 0 Sep 20 20:37 map_files # 包含该进程内存映射的文件
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 maps # 显示进程的内存映射,包含所有加载到进程地址空间的文件和库
-rw-------.   1 zhangchen zhangchen 0 Sep 20 20:37 mem # 显示该进程的虚拟内存信息
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 mountinfo # 提供关于进程挂载点的详细信息
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 mounts # 提供进程的挂载点信息,但它的输出格式较为简洁
-r--------.   1 zhangchen zhangchen 0 Sep 20 20:37 mountstats # 提供进程挂载点的性能统计信息
dr-xr-xr-x.   6 zhangchen zhangchen 0 Sep 20 20:37 net # 包含进程的网络相关信息
dr-x--x--x.   2 zhangchen zhangchen 0 Sep 20 20:37 ns # 提供与进程相关的命名空间信息,如网络、PID 和 UTS 等命名空间
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 numa_maps # 显示进程的NUMA(非一致性内存访问)节点分配
-rw-r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 oom_adj # 控制进程被OOM killer(内存不足杀手)选择的优先级。
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 oom_score # 显示该进程的OOM killer分数
-rw-r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 oom_score_adj # 控制进程被OOM killer(内存不足杀手)选择的优先级。
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 pagemap # 提供与进程页表相关的详细信息
-r--------.   1 zhangchen zhangchen 0 Sep 20 20:37 patch_state # 跟踪补丁应用状态
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 personality # 显示和设置进程的执行环境(“个性”)参数
-rw-r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 projid_map # 显示进程的项目ID映射
lrwxrwxrwx.   1 zhangchen zhangchen 0 Sep 20 20:37 root -> / # 该进程的根目录符号链接。通常指向/
-rw-r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 sched # 提供该进程的调度信息,包括调度统计数据和相关状态
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 schedstat # 提供该进程的调度信息,包括调度统计数据和相关状态
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 sessionid # 显示进程的会话ID
-rw-r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 setgroups # 控制该进程是否可以设置新的组ID
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 smaps # 提供内存映射的详细信息,包括每个映射的大小和属性
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 stack # 显示该进程的内核堆栈信息
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:30 stat # 包含进程的详细状态信息(如CPU使用、进程状态等)
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 statm # 显示进程的内存使用情况
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:30 status # 提供进程的概述,包括 PID、状态、内存使用、权限等
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 syscall # 显示该进程当前正在调用的系统调用信息
dr-xr-xr-x.   3 zhangchen zhangchen 0 Sep 20 20:37 task # 包含该进程的所有线程的子目录,每个线程都有一个独立的目录,类似于/proc的结构
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 timers # 提供该进程的定时器信息
-rw-r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 uid_map # 显示进程的用户ID映射
-r--r--r--.   1 zhangchen zhangchen 0 Sep 20 20:37 wchan # 显示进程当前正在等待的内核函数的名称

        链接文件cwd指向命令执行时的当前工作目录,但它一定是有效的当前工作目录呢?答案不然。可以进行一个小测试,比如首先使用cd命令进入一个目录然后删除它,此时执行的任何命令所创建的任何进程,都没有有效的当前工作目录,如例3所示(这是一个找茬的例子,一般不会发生)。

# 例3
[zhangchen@EDA ~]$ mkdir dir
[zhangchen@EDA ~]$ cd dir
[zhangchen@EDA dir]$ rm ~/dir
[zhangchen@EDA dir]$ sleep 20 &
[1] 12690
[zhangchen@EDA dir]$ ls /proc/12690/cwd -al
lrwxrwxrwx. 1 zhangchen zhangchen 0 Sep 21 00:26 /proc/12690/cwd -> /home/zhangchen/dir (deleted) # 在Redhat系统中,/proc/12690/cwd会被标红,/home/zhangchen/dir (deleted)会闪烁

self进程

        /proc/self是一个链接文件,指向了当前进程的目录,也就是说如果使用ls -al /proc/self命令,则显示其指向的是进程ls的目录,因为访问目录/proc/self时ls进程正在执行,如例4所示。

# 例4
[zhangchen@EDA ~]$ ls -al /proc/self # 查询当前进程(即ls)的信息
lrwxrwxrwx. 1 root root 0 Sep 20 23:26 /proc/self -> 5256 # 指向了/proc/5256
[zhangchen@EDA ~]$ ls -al /proc/self # 查询当前进程(即ls)的信息
lrwxrwxrwx. 1 root root 0 Sep 20 23:26 /proc/self -> 5371 # 指向了/proc/5371
[zhangchen@EDA ~]$ ls -al /proc/self # 查询当前进程(即ls)的信息
lrwxrwxrwx. 1 root root 0 Sep 20 23:26 /proc/self -> 5434 # 指向了/proc/5434

        从例4中可以看出 ,连续三次使用ls命令得到的结果是不同的,这是因为每次执行ls命令都会创建一个新的进程并分配给一个未使用的id号(它们可能相等,因为执行完毕后id号会被回收,但在该例中不相等)。

        如果使用cd命令进入/proc/self,按上面的说法会进入cd进程目录,但它在命令执行完后就被删除了,这会导致第一小节说的无效当前工作目录的问题吗?例5是一个测试。

# 例5
[zhangchen@EDA ~]$ cd /proc/self
[zhangchen@EDA self]$ ls -al cwd exe
lrwxrwxrwx. 1 zhangchen zhangchen 0 Sep 21 00:48 cwd -> /proc/10354
lrwxrwxrwx. 1 zhangchen zhangchen 0 Sep 21 00:11 exe -> /usr/bin/bash

        可以看出,当前工作目录是有效的,而链接文件exe指向的居然是Bash命令的路径!这其实是Bash的进程目录。这是因为对于一些内建命令,不会创建子进程执行,而是直接在当前Bash进程中执行,可以使用type来检测一个命令是否为内建命令,如例6所示。

# 例6
[zhangchen@EDA ~]$ type cd
cd is a shell builtin

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

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

相关文章

SpringMVC1~~~

快速入门 spring容器文件 在src下就是applicationContext-mvc.xml&#xff0c;需要在web.xml指定<init-param>&#xff0c;给DispatcherServlet指定要去操作的spring容器文件 在WEB-INF下就是xxx-servlet.xml&#xff0c;不需要在web.xml指定<init-param>,如果我们…

Qt:智能指针QScopedPointer 的使用(以及如何写一个QScopedPointer )

前言 本文讲述QScopedPointer 的使用&#xff0c;以及自己如何写一个QScopedPointer . 正文 QScopedPointer 的常用方法 以下是 QScopedPointer 的一些常用方法及其详细说明&#xff1a; 构造函数&#xff1a; QScopedPointer<T> ptr(new T);用于创建一个 QScopedPoi…

使用 Elasticsearch Reindex API 迁移数据

使用 Elasticsearch Reindex API 迁移数据 在 Elasticsearch 中&#xff0c;随着需求的变化&#xff0c;可能需要对索引进行重建或更新。这通常涉及创建新索引、迁移数据等步骤。本文介绍如何使用 Reindex API 将旧索引中的数据迁移到新索引中 一、步骤概述 创建新索引&#…

R18 NES 之SSB-less SCell operation for inter-band CA

在TR 21.918 Summary of Rel-18 Work Items 中可以看到SSB-less SCell operation for inter-band CA 是Network energy savings for NR 的一部分,其中还包括cell DTX/DRX 等等其他内容。 网络节能是 5G/NR 成功的关键,可以减少对环境的影响(温室气体排放)并节省运营成本。R…

『功能项目』伤害数字UI显示【53】

我们打开上一篇52眩晕图标显示的项目&#xff0c; 本章要做的事情是在Boss受到伤害时显示伤害数字 首先打开Boss01预制体空间在Canvas下创建一个Text文本 设置Text文本 重命名为DamageUI 设置为隐藏 编写脚本&#xff1a;PlayerCtrl.cs 运行项目 本章做了怪物受伤血量的显示UI…

详细分析Java中的ObjectMapper基本知识(附Demo)

目录 1. 基本知识2. 基本操作2.1 转换Java对象为JSON2.2 转换JSON为Java对象 3. 拓展 1. 基本知识 ObjectMapper 是 Jackson 数据处理库中的核心类之一&#xff0c;主要用于将 Java 对象转换为 JSON 和将 JSON 转换为 Java 对象 Jackson 是当前最流行的 JSON 处理库之一&…

DOCKER 数据库管理软件自己开发--———未来之窗行业应用跨平台架构

- 数据异地容灾服务--未来之窗智慧数据服务 DATA REMOTE DISASTER RECOVERY SERVICE -CyberWin Future Docker-数据查看 CyberWin DATA Viewer 1.docker 样式 mysqli://root:密码172.17.0.2:端口/数据库 阿雪技术观 拥抱开源与共享&#xff0c;见证科技进步奇迹&#xff0c;…

mat (Eclipse Memory Analyzer Tool)使用以及详解

前言 在Java开发中&#xff0c;内存问题往往不易被发现&#xff0c;但它们可能导致应用性能下降甚至崩溃。Eclipse Memory Analyzer Tool&#xff08;MAT&#xff09;是一个强大的开源工具&#xff0c;专门用于分析Java堆转储&#xff08;heap dumps&#xff09;文件&#xff…

2024华为杯研赛E题保姆级教程思路分析

E题题目&#xff1a;高速公路应急车道紧急启用模型 今年的E题设计到图像/视频处理&#xff0c;实际上&#xff0c;E题的难度相对来说较低&#xff0c;大家不用畏惧视频的处理&#xff0c;被这个吓到。实际上&#xff0c;这个不难&#xff0c;解决了视频的处理问题&#xff0c;…

L3 逻辑回归

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 在周将使用 LogisticRegression 函数对经典的鸢尾花 (Iris) 数据集进行分类。将详细介绍逻辑回归的数学原理。 1. 逻辑回归的数学原理 逻辑回归是一种线性分…

如何短期提高品牌声量?说几个有效策略

在如今竞争激烈的市场环境中&#xff0c;品牌声量成为了衡量一个品牌市场影响力的关键指标。一个强大的品牌声量不仅可以增加品牌的可见度&#xff0c;还能有效提升品牌的市场竞争力。但是&#xff0c;如何有效提升品牌声量&#xff0c;成为很多企业面临的挑战。首先我们要明确…

R语言机器学习算法实战系列(二) SVM算法(Support Vector Machine)

文章目录 介绍原理应用方向下载数据加载R包导入数据数据预处理数据描述数据切割标准化数据设置参数训练模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性保存模型总结系统信息介绍 支持向量机(Support Vector Machine,简称SVM)是一种…

Django_Vue3_ElementUI_Release_004_使用nginx部署

1. nginx安装配置 1.1 下载nginx Download nginx 1.2 测试一下 1.3 进入nginx用命令操作 2. 部署 2.1 前端部署 2.1.1 修改nginx监听配置 …conf/nginx.conf http {... # 这里不进行修改server {listen 8010; # 监听 80 端口server_name 192.168.10.24; # 输入服务器 ip…

Matlab simulink建模与仿真 第十八章(Stateflow状态机)

参考视频&#xff1a;Simulink/stateflow的入门培训_哔哩哔哩_bilibili 一、概述 Stateflow是集成于Simulink中的图形化设计与开发工具&#xff0c;主要用于针对控制系统中的复杂控制逻辑进行建模与仿真&#xff0c;或者说&#xff0c;Stateflow适用于针对事件响应系统进行建模…

深度学习:(五)初识神经网络

&#xff08;一&#xff09;神经网络的层数 除去输入层&#xff0c;但包括输出层&#xff0c;每一层都有自己的参数。 输入层称为第零层。 &#xff08;二&#xff09;最简单的神经网络&#xff08;逻辑回归&#xff09; 下图中的小圆圈&#xff0c;代表了一种运算。且一个小…

基于深度学习的花卉智能分类识别系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 传统的花卉分类方法通常依赖于专家的知识和经验&#xff0c;这种方法不仅耗时耗力&#xff0c;而且容易受到主观因素的影响。本系统利用 TensorFlow、Keras 等深度学习框架构建卷积神经网络&#…

【第十三章:Sentosa_DSML社区版-机器学习聚类】

目录 【第十三章&#xff1a;Sentosa_DSML社区版-机器学习聚类】 13.1 KMeans聚类 13.2 二分KMeans聚类 13.3 高斯混合聚类 13.4 模糊C均值聚类 13.5 Canopy聚类 13.6 Canopy-KMeans聚类 13.7 文档主题生成模型聚类 13.8 谱聚类 【第十三章&#xff1a;Sentosa_DSML社…

环境搭建2(游戏逆向)

#include<iostream> #include<windows.h> #include<tchar.h> #include<stdio.h> #pragma warning(disable:4996) //exe应用程序 VOID PrintUI(CONST CHAR* ExeName, CONST CHAR* UIName, CONST CHAR* color, SHORT X坐标, SHORT y坐标, WORD UIwide, W…

硬件工程师笔试面试——开关

目录 11、开关 11.1 基础 开关原理图 开关实物图 11.1.1 概念 11.1.2 常见的开关类型及其应用 11.2 相关问题 11.2.1 开关的工作原理是什么? 11.2.2 在设计一个电子系统时,如何选择最适合的开关类型? 11.2.3 不同类型的开关在实际应用中有哪些优势和局限性? 11.…

AI+教育|拥抱AI智能科技,让课堂更生动高效

AI在教育领域的应用正逐渐成为现实&#xff0c;提供互动性强的学习体验&#xff0c;正在改变传统教育模式。AI不仅改变了传统的教学模式&#xff0c;还为教育提供了更多的可能性和解决方案。从个性化学习体验到自动化管理任务&#xff0c;AI正在全方位提升教育质量和效率。随着…