深入篇【Linux】学习必备:进程环境变量/进程切换
深入篇【Linux】学习必备:进程环境变量/进程切换
- Ⅰ.环境变量
- Ⅱ.深层意义
- Ⅲ.全局属性
- Ⅳ.进程切换
Ⅰ.环境变量
1.环境变量是什么?:环境变量是系统提供的一组name/value形式的变量,不同的环境变量有不同的用户。
一般是用来指定操作系统运行环境的一些参数。
2.比如我们在写C/C++时,在链接时,我们并不知道所链接的动静态库在哪里,但是照样可以链接成功。这就是由于相关环境变量帮助编译器进行查找。
3.环境变量是具有全局属性的。
常见的环境变量有PATH,HOME,SHELL等。
PATH:linux下系统的指令的默认搜索路径
HOME:记录当前用户的家目录
USER:记录当前用户是谁。
通过学习环境变量,我们可以解决下面这个问题:
【问题】为什么系统的指令,可以直接执行呢?而我们写的程序,需要加上当前程序的路径才可以执行呢?
因为已经将系统的指令的所有路径都添加到环境变量PATH里了,而程序执行会默认到默认路径里先查找一遍。找到了就直接执行,找不到就报错。
如何获取到环境变量,或者修改环境变量呢?
1.env:显示所有环境变量
2.echo:用来显示某个环境变量值
3.export:用来创建一个环境变量。
4.set:显示本地顶部关于的shell变量和环境变量。
Ⅱ.深层意义
每一个程序其实都需要环境变量,那么环境变量在哪存着呢?
环境变量存储在一张表里,叫环境表,环境表是一个指针数组,数组里的每个指针指向一个环境变量。

其实我们的main函数是具有参数的,那么这些参数代表着什么意思呢?
#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{int i = 0;for(; env[i]; i++){printf("%s\n", env[i]);}return 0;
}
首先我们可以想一想这个问题:
【问题】指令为什么后面可以加上选项呢?
我们的main函数其实一旦执行就是一个程序了。所以main函数也就对应一个程序进程。而平常的指令我们说也是一个进程,也就是说指令的实现从底层来说也是用main函数实现的。
而正常我们的main函数是不用带参数也可以执行,那么后面的参数代表着什么意思呢?
由指令后面可以带选项我们可以推断出,main函数后面的参数就是用来命令选项的。
1.其中第一个参数argc 是命令的名称。
2.第二个参数char* argv[]是命令的参数。
3.第三个参数char* env[]就是进程的环境变量了。
其实我们写的程序都是子进程,bash才是父进程。而我们在输入指令时,bash会将命令行分散成一个个字符,会将这个字符给指针数组初始化。这样就可以给指令,工具软件等提供命令行选项支持。
而我们写的程序在执行之前,bash也会给main函数里的指针数组初始化。其实main也是一个函数,它也被调用的,至于是谁调用的,这个我们可以认为是操作系统调用的,当调用main函数时,会将自己的环境变量,命令参数什么的给main函数进行初始化。
所以一个程序必须要有两个核心向量表:
1.命令行参数表
2.环境变量表。
我们运行的程序都是子进程,bash才是父进程,bash本身在启动时会从操作系统的配置文件中读取环境变量信息,子进程会继承父进程的环境变量。
这两张表是由操作系统维护的,在程序启动时是操作系统自动初始化的,
所以我们要理解:main函数也是一个被调用的函数,操作系统会将两个表传给main函数的参数进行初始化。
我们可以通过系统调用来获取到环境变量:getenv获取指定的变量。
Ⅲ.全局属性
为什么说环境变量具有全局属性呢?
因为环境变量是可以被子进程继承下去的。父进程的环境变量可以直接拷贝一份给子进程,也就是子进程继承了父进程的环境变量。所以对应环境变量来说,通常是要具有全局属性。而对于一些普通变量是可以不需要有全局属性的。
Ⅳ.进程切换
我们要知道操作系统里有很多进程,而CPU只有一个,这就说明多个进程使用一个CPU。那这个是如何实现的呢?
这个操作需要两大核心:
1.进程切换
2.时间片
也就是操作系统采用基于进程切换基于时间片轮转的调度算法来使用CPU。
在理解进程切换之前,我们需要理解以下问题:
【问题1】函数的返回值是如何在外部拿到的呢?
函数的返回值通常是局部变量,函数销毁就没有了,操作系统通常会将这个返回值放入一个CPU寄存器中存着。
【问题2】系统是如何得知我们进程当前执行到哪一行代码呢?
进程中有一个叫程序计数器pc,可以记录当前进程正在执行指令的下一行指令的地址。
【问题3】CPU中存在很多寄存器,这些寄存器扮演着说明角色呢?
1.可以提高效率。
①将进程高频数据放入寄存器中。
②CPU寄存器中保存的是进程相关的数据,这样进程就可以随时随地被CPU快速访问修改了。
2.所以CPU寄存器里保存的是进程的临时数据。而这些临时数据被称为当前进程运行时的上下文。
当时间片结束时,进程从CPU上离开时,要将直接的上下文数据保存好甚至带走(为什么呢?因为该进程可能还没有执行完整,因为时间片的原因而结束,等下次再到这个进程运行时就要从刚刚结束的地方开始运行)而保存数据的目的就是为了下次进程回来切换时,进程原来的数据可以恢复。
所以进程在切换时有两大核心:
一是保存当前进程的上下文,保存在进程的PCB中。
二是恢复将要切换的进程的数据,从进程的PCB中获取。
并发的本质就是很多进程在CPU上以时间片的方式进行来回切换,人整段代码在一定时间内,都得以推进,切换的速度很快CPU执行也很快,时间片一到,首先将当前进程的上下文保存,然后让该进程去等待队列里排队,等将活跃队列运行完,再将轮转队列放上来,这样CPU就可以周而复始的轮转调度了。
相关文章:
深入篇【Linux】学习必备:进程环境变量/进程切换
深入篇【Linux】学习必备:进程环境变量/进程切换 Ⅰ.环境变量Ⅱ.深层意义Ⅲ.全局属性Ⅳ.进程切换 Ⅰ.环境变量 1.环境变量是什么?:环境变量是系统提供的一组name/value形式的变量,不同的环境变量有不同的用户。 一般是用来指定操作…...
文件系统相关
文件系统部分的大纲要求: 文件系统的全局结构:文件系统在外存中的结构,文件系统在内存中的结构外存空闲空间管理办法虚拟文件系统文件系统挂载 一、文件系统的层次结构 可分为三个层次:最低层是对象及其属性,中间层…...
edm邮件开发信模板
现在很多从事外贸的工作人员在寻找一些邮件模板,今天一米软件给大家总结了几套常用的开发新客户的邮件模板 开发新模板1: Hi Sir, Glad to hear that youre on the market for **. We specialize in this field for several years, with the strengt…...
边缘服务器的未来是什么?思考 5G 和 AI 需求
什么是边缘服务器 边缘服务器是一种分布式计算模式,旨在提高数据中心和云服务的效率,并解决设备之间通信的延迟问题。它将业务从中央数据中心转移到边缘设备附近,将计算、存储和网络资源靠近终端用户和设备,以实现更快速的数据处…...
老卫带你学---leetcode刷题(438. 找到字符串中所有字母异位词)
438. 找到字符串中所有字母异位词 问题: 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。 …...
unity中使用protobuf工具将proto文件转为C#实体脚本
unity中使用protobuf工具将proto文件转为C#实体脚本 介绍优点缺点Protobuf 为什么比 XML 快得多?Protobuf的EncodingProtobuf封解包的过程通常编写一个Google Protocol Buffer应用需要以下几步: Protostuff是什么Protobuf工具总结 介绍 protobuf也就是G…...
1024程序员狂欢节有好礼 | 前沿技术、人工智能、集成电路科学与芯片技术、新一代信息与通信技术、网络空间安全技术
🌹欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 1024程序员狂欢节有好礼 🚩🚩🚩点击直达福利前言一、IT技术 IT Technology《速学Linux:系统应用从入门到精通》《Pytho…...
常用Web安全扫描工具合集
漏洞扫描是一种安全检测行为,更是一类重要的网络安全技术,它能够有效提高网络的安全性,而且漏洞扫描属于主动的防范措施,可以很好地避免黑客攻击行为,做到防患于未然。那么好用的漏洞扫描工具有哪些? 1、A…...
Zoho Mail荣登福布斯小型企业企业邮箱排行榜
在过去的数十载里,电子邮件已成为电子通信领域中不可或缺的一环,而在未来的岁月里,它有望继续在全球范围内普及应用。尽管如今市场上有许多免费的企业邮箱供用户和企业选用,但其中许多产品在特定场景下的专业化功能尚显不足&#…...
Cave Cows 3
题目描述 约翰的 N (1≤N≤50000 )只牛在一个黑魃魃的洞里探险,他们只能通过叫声交流。 两只牛之间的曼哈顿距离决定了声音传播的时间。即牛1与牛2交流,需要的时间为 ∣x1−x2∣∣y1−y2∣ 。其中 −2≤106−106≤x1,x2,y1,y2≤106 。…...
Java程序设计2023-第四次上机练习
8-1三子棋 编写程序,实现简单的三子棋游戏。在三子棋中,双方在33的棋盘中轮流下棋,一方用*示,另一方用O表示。如果一方的3个棋子占据了同一行,同一列或者对角线,则该方获胜。如果棋盘已被棋子占满…...
nonaDlA 逻辑分析仪 使用记录
注意事项,很灵敏,不要用手碰,产生误触发 安装软件 github地址 官方提供的淘宝地址与使用说明 1.安装 1.安装程序 :下载githubDLA源码,打开 software\PulseView.exe安装 2.安装驱动:安装完第一步后&a…...
用HFSS仿真平面线圈的电感量
用HFSS工具仿真平面线圈的电感量 平面线圈是指在平面上绕制而成的线圈,如PCB上的电感线圈、无线供电使用的金属丝绕制而成的线圈等。根据线圈的不同形状可将平面线圈分为方形线圈,六角形线圈、八角形线圈、螺旋原型线圈等。 网络上的计算平面线圈电感量…...
字节面试题——数据库, linux
数据库 1.sq|语句取-一个月内的id分组取-一个年级中每个班级年龄最小的同学名字成绩表输出前三名的 成绩,后三名呢拷贝A表的数据到B表查询每1 ]科目都大于80分的学生名字筛选出每个小时 的记录考察where考察聚合函数where和having的区别-一个数据库sq|查询重复个数…...
ES基础知识
ES基础知识 单独查询一个文档(_doc)时,Elasticsearch 会返回该文档的原始数据,通常以 JSON 格式呈现。以下是一些常见字段及其含义: _index: 表示文档所属的索引名称。_type (在较早的 Elasticsearch 版本中使用&…...
当年很流行,现在已经淘汰的前端技术有哪些?
近几年,前端技术真可谓是飞速发展,不断有新的技术涌现,爆火的前端框架 Astro,前端运行时 Bun,构建工具 Vite 等都给前端提供了强大动力。当然,也有很多前端技术随着技术的发展不再需要使用,有了…...
IP地址定位是什么?有哪些优缺点?
IP地址定位是一种用于确定设备或用户地理位置的方法,具有一些明显的优点和缺点。以下是IP地址定位的优缺点: 优点: 广泛适用性: IP地址定位适用于几乎所有与互联网连接的设备,包括计算机、智能手机、平板电脑和物联网…...
scrapy爬虫之网站图片爬取
Scrapy是一个强大的Python爬虫框架,可以用于爬取网站上的各种数据,包括图片。以下是一个简单的示例,演示如何使用Scrapy来爬取网站上的图片: 安装Scrapy: 如果尚未安装Scrapy,可以使用以下命令安装它&…...
flask整合rabbitMQ插件的方式
文章目录 二、Python-flask-rabbitMQ-插件方式整合引言具体步骤1 安装依赖:2 编写实体类:3 编写消费者和生产者:4 初始化消费者和生产者:5 其他地方使用生产者 二、Python-flask-rabbitMQ-插件方式整合 引言 当今互联网应用的高…...
【React】高频面试题
1. 简述下 React 的事件代理机制? React使用了一种称为“事件代理”(Event Delegation)的机制来处理事件。事件代理是指将事件处理程序绑定到组件的父级元素上,然后在需要处理事件的子元素上触发事件时,事件将被委托给…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
