当前位置: 首页 > news >正文

2024-09-25 环境变量,进程地址空间

一、认识常见的环境变量

1. echo $HOME

输出当前用户对应的家目录
当用户登录系统时,流程如下:
(1)用户登录系统后,系统启动Shell程序。
(2)启动bash shell,准备接收用户指令。
(3)在bash启动过程中,它会读取环境变量配置文件,如 .bashrc 或 .profile 等。
(4)从配置文件中加载重要的环境变量,例如 PATH 和 HOME :
         PATH变量定义了命令的搜索路径,使得用户可以运行各种程序。
         HOME变量指定了用户的主目录,通常为 /home/usr(usr 应由实际的用户名代替)。
(5)需要注意的是,bash本身也是一个进程,它在操作系统中运行并具有唯一的进程ID。
(6)当bash进程启动时,它会设置当前工作目录(cwd),即当前所在的目录位置。
(7)通常情况下,登录后的bash进程的当前工作目录会设置为用户的主目录,
         例如 cwd -> /home/usr
(8)用户在命令行输入的每一条命令,都会被bash进程解析并执行。
         这些命令实际上是bash进程的子进程,它们继承了bash进程的环境变量和权限。

2. echo $SHELL

命令的作用是输出当前用户的默认shell的路径。

3. USER

在Linux操作系统中,环境变量USER是用来存储当前登录用户的用户名的。

在编写Shell脚本或程序时,可以使用$USER获取当前登录的用户名,并根据不同的用户执行不同的操作。

二、理解环境变量

系统提供的具有“全局属性”的变量

1. 环境变量和本地变量

export 可以将本地变量导出到环境变量。

环境变量是可以被子进程继承下去的,而本地变量不行。

【Q】那么 fork() 创建的子进程呢?

【A】环境变量可以被所有bash之后的进程看到,所以环境变量具有全局属性

这样设计的理由如下:

(1)系统的配置信息,尤其是具有“指导性”的配置信息,它是系统配置起效的一种表现

(2)进程具有独立性,环境变量可以用来在进程间传递数据(只读数据)

2. environ

environ 被定义为一个指向 char * 的指针数组,这意味着它是一个指向字符串数组的指针。每个字符串表示一个环境变量,格式为 "NAME=value"

由于 environ 是一个全局变量,因此不需要显式地声明它,但是可以通过 extern 关键字来声明以便使用它

extern char **environ;

这行代码告诉编译器 environ 是一个已经存在的指针数组,可以用来访问环境变量。

遍历方法如下:

int i = 0;
for (; environ[i]; ++i) {printf("environ[%d]: %s\n", i, environ[i]);
}

三、进程地址空间 Pt.1

1. 地址空间

高地址

命令行参数 环境变量
⬇️
共享区
⬆️
未初始化数据
初始化数据
正文代码

低地址

进程地址空间不是程序地址空间

  • 操作系统让每一个进程都认为自己是独占系统物理内存大小,进程彼此之间不知道,不关心对方的存在,从而实现一定程度的隔离
  • 先描述再组织:所谓的进程虚拟地址空间,本质是一个内核数据结构对象(类似PCB)

 2. 区域划分

struct destoproom{int start_part1, end_part2;int start_part2, end_part2;
};struct destoproom part = {1, 50, 51, 100};

区域划分的本质:告知开始和结束即可

3. 地址空间上的地址

2^32*1 字节 = 4 GB

一共会存在2^32个地址

  • 地址本质上就是一个数字,可以被保存为unsigned long(4字节)
  • 空间范围内的地址,可以随便用,暂时不需要记录它的地址

操作系统会构建页表,构建虚拟地址和物理地址的映射关系

struct mm_struct + 页表 = 虚拟内存管理方案

父子进程映射到同样的代码内存区域,所以父子进程代码共享(类似浅拷贝)

故在父子进程不修改变量时,数据其实也是共享的

修改 ➡️ 写入 ➡️ 进程具有独立性 ➡️ 把目标内存拷贝一份,修改物理地址,重新建立映射,但虚拟地址不变,上述过程由OS自主完成,被称为写时拷贝机制

进程 = 内核数据结构(task_struct, mm_struct, 页表)+ 自己的代码和数据

进程的独立性:内核数据结构各自一份,代码和数据也是独立的

相关文章:

2024-09-25 环境变量,进程地址空间

一、认识常见的环境变量 1. echo $HOME 输出当前用户对应的家目录 当用户登录系统时,流程如下: (1)用户登录系统后,系统启动Shell程序。 (2)启动bash shell,准备接收用户指令。 &a…...

中国移动机器人将投入养老场景;华为与APUS共筑AI医疗多场景应用

AgeTech News 一周行业大事件 华为与APUS合作,共筑AI医疗多场景应用 中国移动展出人形机器人,预计投入养老等场景 作为科技与奥富能签约,共拓智能适老化改造领域 天与养老与香港科技园,共探智慧养老新模式 中山大学合作中国…...

青少年编程能力等级测评CPA C++ 四级试卷(1)

青少年编程能力等级测评CPA C 四级试卷(1) 一、单项选择题(共15题,每题3分,共45分) CP4_1_1.在面向对象程序设计中,与数据构成一个相互依存的整体的是( )。 A. 对数据…...

树上任意两点的距离

题目描述 给出 n 个点的一棵树,多次询问两点之间的最短距离。 注意:边是双向的。 输入描述 第一行为两个整数 n 和 m。n 表示点数,m 表示询问次数; 下来 n−1 行,每行三个整数 x,y,k,表示点 x 和点 y 之间…...

【 thinkphp8 】00008 thinkphp8数据查询,常用table,name方法,进行数据查询汇总

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【 t…...

Git的命令合集

关于Git的一些命令合集,会慢慢更新! 20241024程序员节开始写的,记录一下~~ git查看log、查看详细提交记录 会显示之前的提交记录 , 排序由近及远 git log log按q退出 git回退到某个commit命令: 退到/进到指定commit的sha码&…...

博客搭建之路:hexo搜索引擎收录

文章目录 hexo搜索引擎收录以百度为例 hexo搜索引擎收录 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 写博客的目的肯定不是就只有自己能看到,想让更多的人看到就需要可以让搜索引擎来收录对应的文章。hexo支持生成站点地图sitemap 在hexo下的_config.yml中配置站点…...

创建Windows系统还原点

系统保护...

Linux等保测评需要用到的命令

三权设置 查看账户情况 cd /home/ ll 设置审计账户 useradd shenji passwd shenji 修改密码 passwd新密码 设置管理账户 useradd guanli passwd guanli compgen -u 查看用户 切换到root账户 su root 设置审计用户权限 vim /etc/sudoers shenji ALL (root) NOPASSWD:…...

PostgreSQL的学习心得和知识总结(一百五十六)|auto_explain — log execution plans of slow queries

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…...

数据结构模板代码合集(不完整)

P3368 【模板】树状数组 2 #include <bits/stdc.h> using namespace std; const int maxn 5e5 7;int n, m, s, t; int ans; int a[maxn]; struct node{int l, r;int num; }tr[maxn * 4];void build(int p, int l, int r){tr[p] {l, r, 0};if(l r){tr[p].num a[l];r…...

shell脚本语法详解

目录 shell语法基础 指定shell解析器 注释 运行 变量 定义变量 引用变量 清除变量值 从键盘获取值 输入单值 添加输入提示语 读取多值 ​编辑 定义只读变量 环境变量 设置环境变量与查看环境变量 特殊变量 三种引号的作用与区别 小括号与大括号 参数传递 位…...

2021亚洲机器学习会议:面向单阶段跨域检测的域自适应YOLO(ACML2021)

原文标题&#xff1a;Domain Adaptive YOLO for One-Stage Cross-Domain Detection 中文标题&#xff1a;面向单阶段跨域检测的域自适应YOLO 1、Abstract 域转移是目标检测器在实际应用中推广的主要挑战。两级检测器的域自适应新兴技术有助于解决这个问题。然而&#xff0c;两级…...

面试题:描述在前端开发中,如何利用数据结构来优化页面渲染性能,并给出一个具体的示例。

在前端开发中&#xff0c;优化页面渲染性能是提升用户体验的关键之一。合理地使用数据结构可以有效地减少DOM操作的次数、提高数据处理的效率&#xff0c;从而加快页面的渲染速度。以下是一些策略&#xff0c;并给出一个具体的示例。 1. 使用合适的数据结构 数组与对象&#…...

微积分复习笔记 Calculus Volume 1 - 3.2 he Derivative as a Function

3.2 The Derivative as a Function - Calculus Volume 1 | OpenStax...

html 轮播图效果

轮播效果&#xff1a; 1、鼠标没有移入到banner,自动轮播 2、鼠标移入&#xff1a;取消自动轮播、移除开始自动轮播 3、点击指示点开始轮播到对应位置 4、点击前一个后一个按钮&#xff0c;轮播到上一个下一个图片 注意 最后一个图片无缝滚动&#xff0c;就是先克隆第一个图片…...

Android Room(SQLite) too many SQL variables异常

SQLiteException 一、解决办法1. 修改数据库语句2. 分批执行 二、问题根源 转载请注明出处: https://blog.csdn.net/hx7013/article/details/143198862 在使用 Room 或其他基于 SQLite 的 ORM 框架时&#xff0c;批量操作如 IN 或 NOT IN 查询可能会触发 android.database.sqli…...

sentinel原理源码分析系列(八)-熔断

限流为了防止过度使用资源造成系统不稳&#xff0c;熔断是为了识别出”坏”资源&#xff0c;避免好的资源受牵连(雪崩效应)&#xff0c;是保证系统稳定性的关键&#xff0c;也是资源有效使用的关键&#xff0c;sentinel熔断插槽名称Degrade(降级)&#xff0c;本人觉得应该改为熔…...

安全见闻(4)——开阔眼界,不做井底之蛙

内容预览 ≧∀≦ゞ 安全见闻四&#xff1a;操作系统安全机制深度解析声明操作系统机制1. 注册表2. 防火墙3. 自启动与计划任务4. 事件日志5. 内核驱动与设备驱动6. 系统服务7. 进程与线程8. 系统编程 从操作系统机制看病毒设计1. 自启动&#xff1a;病毒如何在系统启动时运行&a…...

(二十二)、k8s 中的关键概念

文章目录 1、总体概览2、第一层&#xff1a;物理机、集群、Node、Pod 之间的关系2、第二层&#xff1a;命名空间 Namespace3、定义4、控制平面&#xff08;Control Plane&#xff09;5、特别的概念 Service6、Deployment 经过 之前几篇文章对 k8s 的实践&#xff0c;结合实践&…...

为什么92%的Python低代码平台不敢暴露内核?:深度解析GIL绕过策略、上下文感知缓存与热重载原子切换机制

第一章&#xff1a;Python低代码平台内核不透明的产业困局在当前企业数字化加速落地的背景下&#xff0c;Python生态衍生出大量低代码平台&#xff08;如Streamlit Cloud、Gradio Spaces、Dash Enterprise&#xff09;&#xff0c;它们以“拖拉拽少量Python脚本”为卖点&#x…...

Source Han Serif TTF:企业级中文排版战略选择与规模化部署指南

Source Han Serif TTF&#xff1a;企业级中文排版战略选择与规模化部署指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 思源宋体TTF作为Adobe与Google联合开发的开源中文字体解决方…...

Vxe-Table横向也能无限滚?搞定超宽表格列动态加载的完整配置指南

Vxe-Table横向无限滚动实战&#xff1a;超宽表格列动态加载的终极解决方案 在金融分析、数据报表和动态表单等场景中&#xff0c;前端开发者经常面临一个棘手问题&#xff1a;如何处理字段数量可能无限增长的宽表格&#xff1f;传统分页方式会割裂数据连续性&#xff0c;而一次…...

告别英文界面:VSCode 最新版中文语言包安装与配置全攻略(Windows/macOS通用)

告别英文界面&#xff1a;VSCode 最新版中文语言包安装与配置全攻略&#xff08;Windows/macOS通用&#xff09; 作为一名长期使用VSCode的开发者&#xff0c;我深知英文界面给非英语母语用户带来的困扰。菜单栏里那些专业术语、设置项中的生僻词汇&#xff0c;常常让我们在开…...

从逗号到标签:用React 19 + TailwindCSS V4构建智能选项解析器

1. 为什么需要智能标签解析器&#xff1f; 在日常开发中&#xff0c;我们经常遇到这样的场景&#xff1a;用户需要输入多个选项&#xff0c;比如商品标签、兴趣关键词或者任务分类。传统做法是让用户手动输入每个标签后按回车&#xff0c;这种体验既笨拙又低效。而一个优秀的智…...

Navicat密码解密工具:企业级数据安全与密码恢复解决方案

Navicat密码解密工具&#xff1a;企业级数据安全与密码恢复解决方案 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt Navicat密码解密工具是一款专为数据库…...

granite-4.0-h-350m从部署到应用:Ollama本地大模型在法律文书处理中的案例

granite-4.0-h-350m从部署到应用&#xff1a;Ollama本地大模型在法律文书处理中的案例 1. 快速上手&#xff1a;granite-4.0-h-350m模型部署 granite-4.0-h-350m是一个轻量级的指令跟随模型&#xff0c;专门为本地部署和特定领域应用而设计。这个模型只有3.5亿参数&#xff0…...

全网薅羊毛新地图”:华莱士套餐实测13.9元起,连锁巨头麦当劳紧随其后!

近期&#xff0c;随着经济压力的加大&#xff0c;餐饮市场的竞争愈发激烈。在原本以低价策略闻名的麦当劳“穷鬼套餐”开始面临严峻挑战之际&#xff0c;一家曾被网友戏称为“穷鬼旗舰”的连锁快餐品牌——华莱士&#xff0c;悄然推出了更具性价比的“超值套餐”&#xff0c;在…...

MCMC可视化指南:用动画理解马尔可夫链的收敛过程

MCMC可视化指南&#xff1a;用动画理解马尔可夫链的收敛过程 在数据科学和统计建模领域&#xff0c;马尔可夫链蒙特卡洛(MCMC)方法已经成为解决复杂概率分布采样问题的利器。但对于初学者而言&#xff0c;理解马尔可夫链如何通过随机游走最终收敛到目标分布&#xff0c;往往是…...

全面掌握ESP WiFi中继器DHCP服务器配置:高效管理嵌入式设备网络

全面掌握ESP WiFi中继器DHCP服务器配置&#xff1a;高效管理嵌入式设备网络 【免费下载链接】esp_wifi_repeater A full functional WiFi Repeater (correctly: a WiFi NAT Router) 项目地址: https://gitcode.com/gh_mirrors/es/esp_wifi_repeater ESP WiFi中继器是一款…...