【Linux】进程字段、环境变量与进程地址空间

news2024/11/18 7:01:12

75e194dacf184b278fe6cf99c1d32546.jpeg

🌈 个人主页:谁在夜里看海.

🔥 个人专栏:《C++系列》《Linux系列》《算法系列》

⛰️ 丢掉幻想,准备斗争

            d047c7b1ef574257b8397fe5cc5c290b.gif

目录

一、查看进程字段

1.字段说明            

2.进程优先级

二、环境变量

1.概念

2.指令与PATH

3.环境变量相关命令

三、程序地址空间

1.物理内存

2.虚拟内存

3.写时拷贝


一、查看进程字段

在Linux下,可以使用ps指令显示当前系统运行的进程信息,包含进程状态、资源使用情况等内容ps的-l选项可以显示长格式信息,包括F(标志)、S(状态)、UID、PID等详细字段:

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD

1.字段说明            

下面是对字段的解释说明:

字段含义
F

标志位(Flags)。与进程状态和调度相关的标志,常见值:
- 0:普通进程,通常是非前台组成员的用户进程
- 1:前台进程组成员,通常是终端运行的交互式程序

- 4:由超级用户(root 用户)创建的进程

- 10:系统不可杀的进程,如核心守护进程

S        进程状态(State)。表示进程当前的状态,可能的值:
- R:运行(Runnable)
- S:睡眠(Sleeping)
- D:不可中断睡眠(Uninterruptible Sleep)
- Z:僵尸进程(Zombie)
- T:停止(Stopped)
UID

用户 ID(User ID)。表示运行此进程的用户的 ID,即执行者的身份

- 0:超级用户(root),拥有最高权限

- 1-99:通常保留给系统用户(例如 daemonbin

- 1000 及以上:普通用户

PID进程 ID(Process ID)系统中每个运行进程的唯一标识符
PPID父进程 ID(Parent Process ID)表示创建该进程的父进程的 PID
CCPU 使用率(CPU utilization)表示进程使用 CPU 的相对时间(以百分比表示)
PRI优先级(Priority)进程当前的调度优先级,数值越低优先级越高
NINice 值(Niceness)影响进程优先级的用户调整值,范围为 -20(最高优先级)到 19(最低优先级)
ADDR内存地址(memory address)与进程的内存映射相关,通常显示为 -,表示不适用
SZ内存大小(Size)表示进程的虚拟内存大小(以页为单位)
WCHAN等待通道(Wait Channel)如果进程正在等待资源或事件,则显示等待的内核函数名,否则为 -
TTY        终端(Terminal)表示与进程关联的终端设备名
- 如果是后台进程,可能显示为 ?
TIMECPU 时间(Time)表示进程运行以来累计使用的 CPU 时间(格式为 hh:mm:ss
CMD命令名(Command)。表示启动该进程的命令。

2.进程优先级

PRI表示进程的优先级,PRI值越低则优先级越高,那么Nice值是什么呢?它是用来影响进程优先级的用户调整值,范围是-20~19:

加入Nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice

PRI越小进程越快被执行,因此如果加入正数Nice值,会使进程优先级降低;加入负数Nice值,会使进程优先级提高。

注意:Nice并不是进程优先级,它们不是一个概念,可以理解成Nice值是进程优先级的修正数据。

更改nice值

可以使用 renice 命令更改已存在进程的nice值:

renice <新nice值> -p <进程id>

 

二、环境变量

1.概念

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,例如:我们在编写代码的时候,从来不知道我们的动静态库在哪,但是仍然可以链接成功,生成可执行程序,原因就是有环境变量帮助编译器进行查找。环境变量在系统中具有全局特性

配置进程和应用程序:

环境变量为系统提供了一些配置信息,如系统路径、语言设置、用户名等。程序通过读取这些变量来决定它们的行为方式。例如:操作系统通过 PATH 环境变量确定哪些目录包含可执行文件,进而决定执行哪个命令。

常见的环境变量:

名称作用
PATH定义操作系统查找可执行文件的路径。当你在终端输入命令时,操作系统会在 PATH 中定义的路径下查找对应的可执行文件
HOME当前用户的主目录路径。例如,在 Linux 上是 /home/username
USER当前登录的用户名
SHELL当前用户使用的 shell 类型,常见的有 bashzsh
PWD当前工作目录路径
TEMP存放临时文件的目录

测试:

分别在普通用户和超级用户下查看HOME:

2.指令与PATH

当我们在终端输入一个指令时(如ls),系统会执行相应的操作,并显示在终端,那么这个过程的本质是什么呢?我们在终端输入的指令实际上就是与操作系统交互的一种方式:

①:指令本质上其实是一个可执行文件,操作系统通过环境变量PATH查找对应的文件,PATH是一个包含一系列目录路径的环境变量,系统会按顺序在这些目录下寻找文件;

②:系统找到文件之后,会将文件加载到内存,文件内部以二进制形式存储,包含了操作系统能理解的指令(如机器码),通过解码实现相应的操作。

vim /bin/ls #查看bin目录下的ls命令(二进制文件)

我们编写的程序在编译之后最终也会变成一个二进制的可执行文件,然而该文件的目录路径默认并没有保存在PATH中,所以在终端输入test没有反应,原因就是系统找不到该文件(指令):

需要输入./test,显示说明test文件在当前目录下,系统才能找到文件,执行命令:

所以我们自己定义的test文件也可以看成是一个命令, 因为test文件的目录路径没有在PATH中保存,所以直接执行找不到,那么我们手动将路径加载到PATH中呢:

export PATH=$PATH:$(pwd) #将当前目录加载到PATH中

此时输入test应该是可以执行的,但实际上并没有执行,这是为什么呢?

通过echo查看PATH,发现test的目录路径确实已经加载进去了,那就是test文件本身的原因:

./test没有问题,test是可以被正常执行的,但是为什么输入test并没有执行呢?

test 是一个常见的 Shell 内置命令,主要用于执行条件测试(如 if 语句中的条件判断)。因此,当输入 test 时,Shell 会首先尝试执行内置的 test 命令,而不是文件系统中的可执行文件。

那我们修改一下文件名称,修改成ttt,这样就不会和内置命令冲突了 :

3.环境变量相关命令

在Linux中,有以下几种和环境变量相关的命令:

1. echo: 显示某个环境变量值

2. export: 设置一个新的环境变量

3. env: 显示所有环境变量

4. unset: 清除环境变量

5. set: 显示本地定义的shell变量和环境变量

env: 

unset: 

unset PATH #删除PATH

 

命令无法执行(由于删除了PATH,系统找不到该命令所在的路径了)

export:

export PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ywh/.local/bin:/home/ywh/bin

 

将PATH恢复之后,命令可以正常执行 。

三、程序地址空间

程序在内存中的存储是按照特定的结构进行存储的,一般遵循如下顺序:

我们用代码来验证一下:

通过上述示例我们感受到,程序在内存中的存储是严格遵循顺序的,操作系统这么设计的的目的是为了更高效地管理内存,实现内存的保护和分离

但是实际上的内存地址存储并不是有序的,要知道为什么,就得从内存存储的底层原理讲起:

1.物理内存

物理内存是由实际的硬件(如内存芯片)组成的,其存储空间是物理上分散的。内存芯片的组织结构(如 DRAM)本身就是分散的,这意味着内存中的每个存储单元并不按照程序或操作系统的需求排列在一起。内存是由多个内存模块和芯片组成的,它们的物理位置和布局通常是随机的,无法像我们上述所讲的那样在逻辑上进行整齐排列。

所以,程序地址空间并不是真正的物理内存,那么他究竟是什么呢?

程序地址空间是操作系统为每个进程提供的一种抽象视图,是虚拟内存

2.虚拟内存

程序访问的地址并不是真实的物理地址,而是虚拟地址,由于物理地址的分块存储,没办法实现地址的有序性,而虚拟地址则不然,它可以连续存储,不需要考虑实际情况,但是虚拟地址终究只是一个抽象的概念,不能真正地存储数据,所以需要将虚拟地址与物理地址一一对应,就像一个键值对一样,将虚拟地址映射到物理地址

虚拟地址与物理地址的映射是通过操作系统的虚拟内存管理机制和内存管理单元共同实现的。虚拟地址与物理地址的转换在页表中实现,

当CPU需要访问内存时,先将虚拟地址传输给内存管理单元,管理单元根据页表的映射关系得到对应的物理地址,根据物理地址找到物理内存进行相应的操作。

虚拟内存管理机制除了可以让内存存储变得有序,便于管理,还可以节省物理内存空间,提高存储效率,一个直观的表现就是,32位的处理器可以存储约4GB的内存空间,但是实际上其RAM存储器是小于4GB的,这是为什么呢?不同的虚拟地址可以映射相同的物理地址,写时拷贝就是一个典型的例子:

3.写时拷贝

当多个实体(如进程、线程或对象)需要共享一段数据时,初始阶段并不额外开辟空间,而是让它们共同指向一块物理空间。只有当某个实体需要修改数据时,才真正执行数据的拷贝操作。这样可以有效减少不必要的资源占用。

例如:当父进程创建一个子进程时,子进程需要继承父进程的一系列数据,在初始阶段,虽然他们的虚拟地址不同,但在页表中,它们映射的是同一块物理地址,只有在子进程需要修改数据时,才会相应地拷贝数据,开辟空间,修改映射关系


以上就是【进程字段、环境变量与进程地址空间】的全部内容,欢迎指正~  

码文不易,还请多多关注支持,这是我持续创作的最大动力!  

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

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

相关文章

无人机场景 - 目标检测数据集 - 车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;无人机场景车辆检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如无人机场景城市道路行驶车辆图片、无人机场景城市道边停车车辆图片、无人机场景停车场车辆图片、无人机场景小区车辆图片、无人机场景车辆遮挡、车…

【C++】vector 类模拟实现:探索动态数组的奥秘

&#x1f31f; 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。&#x1f31f; 如果你对string&#xff0c;vector还存在疑惑&#xff0c;欢迎阅读我之前的作品 &#xff1a; 之前文章&#x1f525;&#x1f52…

小程序-基于java+SpringBoot+Vue的驾校预约平台设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

初识算法 · 模拟(1)

目录 前言&#xff1a; 替换所有的问号 题目解析 算法原理 算法编写 提莫攻击 题目解析 算法原理 算法编写 外观数列 题目解析 算法原理 算法编写 前言&#xff1a; ​本文的主题是模拟&#xff0c;通过三道题目讲解&#xff0c;一道是提莫攻击&#xff0c;一道是…

使用 Vue 和 Create-Vue 构建工程化前端项目

目录 前言1. 工程化的意义与 Vue 的生态支持2. 搭建 Vue 工程化项目2.1 环境准备2.2 使用 create-vue 创建项目2.2.1 初始化项目2.2.2 安装依赖2.2.3 本地运行 3. Vue 项目的目录结构解析4. Vue 开发流程详解4.1 项目入口与根组件4.1.1 main.js 的作用4.1.2 App.vue 的结构 4.2…

Android中的AMS(Activity Manager Service)详解

Android中的AMS&#xff08;Activity Manager Service&#xff09;详解 AMS (Activity Manager Service) 是 Android 系统中非常核心的服务之一&#xff0c;它负责管理应用程序的生命周期、任务栈、进程、广播、服务等功能。AMS 是整个 Android Framework 的调度中心&#xff…

31.3 XOR压缩和相关的prometheus源码解读

本节重点介绍 : xor 压缩value原理xor压缩过程讲解xor压缩prometheus源码解读xor 压缩效果 xor 压缩value原理 原理:时序数据库相邻点变化不大&#xff0c;采用异或压缩float64的前缀和后缀0个数 xor压缩过程讲解 第一个值使用原始点存储计算和前面的值的xor 如果XOR值为0&…

UNIAPP发布小程序调用讯飞在线语音合成+实时播报

语音合成能够将文字转化为自然流畅的人声&#xff0c;提供100发音人供您选择&#xff0c;支持多语种、多方言和中英混合&#xff0c;可灵活配置音频参数。广泛应用于新闻阅读、出行导航、智能硬件和通知播报等场景。 在当下大模型火爆的今日&#xff0c;语音交互页离不开语音合…

【蓝牙协议栈】【BLE】【BAS】精讲蓝牙电池服务

1. 蓝牙电池服务(Bluetooth Battery Service)概念 蓝牙电池服务是蓝牙设备与其他设备通信时用于报告其剩余电池电量的标准服务。它让用户能够随时了解蓝牙设备(如无线耳机、智能手表、蓝牙鼠标/键盘等)的电池状态,从而方便地管理这些设备的续航与电源使用。 BAS通常用于在…

无线迷踪:陈欣的网络之旅

第一章 陈欣是一名资深的网络工程师&#xff0c;工作在一家领先的科技公司。她的生活平静而有序&#xff0c;直到有一天&#xff0c;公司的无线网络突然出现了严重的问题。员工们的设备频繁断开连接&#xff0c;无法正常使用。这个问题不仅影响了工作效率&#xff0c;还引起了…

【redis】—— 环境搭建教程

上一节&#xff0c;我们大致了解了Redis的几个重要版本&#xff0c;在本教程中&#xff0c;我们选择了5.0版本&#xff0c;因为5.0已经具备了大部分的功能特性&#xff0c;并且与7.0版本相比&#xff0c;其安装使用过程更为简便。 Redis的官方并不直接支持微软的Windows操作系统…

如何查看python源代码

众所周知&#xff0c;Python内建了许多函数模块&#xff0c;并且我们可能还会安装许多第三方模块等等。 下面以getpass为例查看其源代码。 1.help(getpass) 输入该命令找到file路径&#xff0c;并且可以查看其其提供的功能。 2.利用getpass.__file__查看位置 最后找到该文件…

java笔试练习题笔记(10)

关于继承和实现说法正确的 是 &#xff1f; ( )A.类可以实现多个接口&#xff0c;接口可以继承&#xff08;或扩展&#xff09;多个接口 B.类可以实现多个接口&#xff0c;接口不能继承&#xff08;或扩展&#xff09;多个接口 C.类和接口都可以实现多个接口 D.类和接口都不…

前端开发之打印功的使用和实例(vue-print-nb)

通过插件来进行实现 前言效果图1、安装插件vue2vue32、 引入Vue项目2、 使用2.1、在项目中创建按钮并且使用v-print绑定绑定打印事件2.2、编写要打印的内容,给内容附加唯一的id2.3、绑定的时间的方法和参数3、整体代码(此代码是通过vue3来进行实现的但是逻辑都是一样的)前言…

NavVis VLX3的精度怎么去进行验证?【上海沪敖3D】

01、精度评价现状 三维捕捉行业还没有建立一个用于估算或验证移动激光扫描系统精度的统一标准。因此&#xff0c;需要高精度交付成果的专业人士很难相信设备所标注的精度规格&#xff0c;也就很难知道基于SLAM的移动激光扫描系统是否适合当前的项目。 NavVis将通过展示一种严格…

Java | Leetcode Java题解之第564题寻找最近的回文数

题目&#xff1a; 题解&#xff1a; class Solution {public String nearestPalindromic(String n) {long selfNumber Long.parseLong(n), ans -1;List<Long> candidates getCandidates(n);for (long candidate : candidates) {if (candidate ! selfNumber) {if (ans…

ES6标准-Promise对象

目录 Promise对象的含义 Promise对象的特点 Promise对象的缺点 Promise对象的基本用法 Promise对象的简单例子 Promise新建后就会立即执行 Promise对象回调函数的参数 Promise参数不会中断运行 Promise对象的then方法 Promise对象的catch()方法 Promise状态为resolv…

如何利用CSS制作导航菜单

1.利用CSS技术&#xff0c;结合链接和列表&#xff0c;设计并实现“山水之间”页面 示例代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>山水之间</title><style>.all{width:900px;}.top{width:900px;h…

Github 2024-11-17 php开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-17统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10JavaScript项目2Nextcloud服务器:安全的数据之家 创建周期:2796 天开发语言:PHP, JavaScript协议类型:GNU Affero General Public…

【工具变量】2024-2025年地级市异质性数据、城市分组异质性数据(老工业、环境保护、人口流入、沿海等)

一、数据范围&#xff1a; &#xff08;1&#xff09;南北方城市 &#xff08;2&#xff09;东中西城市 &#xff08;3&#xff09;七大地理区、八大综合经济区 &#xff08;4&#xff09;城市群&#xff0c;长三角珠三角京津冀等 &#xff08;5&#xff09;长江流域沿岸、黄河…