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

深入篇【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】学习必备&#xff1a;进程环境变量/进程切换 Ⅰ.环境变量Ⅱ.深层意义Ⅲ.全局属性Ⅳ.进程切换 Ⅰ.环境变量 1.环境变量是什么&#xff1f;&#xff1a;环境变量是系统提供的一组name/value形式的变量&#xff0c;不同的环境变量有不同的用户。 一般是用来指定操作…...

文件系统相关

文件系统部分的大纲要求&#xff1a; 文件系统的全局结构&#xff1a;文件系统在外存中的结构&#xff0c;文件系统在内存中的结构外存空闲空间管理办法虚拟文件系统文件系统挂载 一、文件系统的层次结构 可分为三个层次&#xff1a;最低层是对象及其属性&#xff0c;中间层…...

edm邮件开发信模板

现在很多从事外贸的工作人员在寻找一些邮件模板&#xff0c;今天一米软件给大家总结了几套常用的开发新客户的邮件模板 开发新模板1&#xff1a; Hi Sir, Glad to hear that youre on the market for **. We specialize in this field for several years, with the strengt…...

边缘服务器的未来是什么?思考 5G 和 AI 需求

什么是边缘服务器 边缘服务器是一种分布式计算模式&#xff0c;旨在提高数据中心和云服务的效率&#xff0c;并解决设备之间通信的延迟问题。它将业务从中央数据中心转移到边缘设备附近&#xff0c;将计算、存储和网络资源靠近终端用户和设备&#xff0c;以实现更快速的数据处…...

老卫带你学---leetcode刷题(438. 找到字符串中所有字母异位词)

438. 找到字符串中所有字母异位词 问题&#xff1a; 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&#xff08;包括相同的字符串&#xff09;。 …...

unity中使用protobuf工具将proto文件转为C#实体脚本

unity中使用protobuf工具将proto文件转为C#实体脚本 介绍优点缺点Protobuf 为什么比 XML 快得多&#xff1f;Protobuf的EncodingProtobuf封解包的过程通常编写一个Google Protocol Buffer应用需要以下几步&#xff1a; Protostuff是什么Protobuf工具总结 介绍 protobuf也就是G…...

1024程序员狂欢节有好礼 | 前沿技术、人工智能、集成电路科学与芯片技术、新一代信息与通信技术、网络空间安全技术

&#x1f339;欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 1024程序员狂欢节有好礼 &#x1f6a9;&#x1f6a9;&#x1f6a9;点击直达福利前言一、IT技术 IT Technology《速学Linux&#xff1a;系统应用从入门到精通》《Pytho…...

常用Web安全扫描工具合集

漏洞扫描是一种安全检测行为&#xff0c;更是一类重要的网络安全技术&#xff0c;它能够有效提高网络的安全性&#xff0c;而且漏洞扫描属于主动的防范措施&#xff0c;可以很好地避免黑客攻击行为&#xff0c;做到防患于未然。那么好用的漏洞扫描工具有哪些&#xff1f; 1、A…...

Zoho Mail荣登福布斯小型企业企业邮箱排行榜

在过去的数十载里&#xff0c;电子邮件已成为电子通信领域中不可或缺的一环&#xff0c;而在未来的岁月里&#xff0c;它有望继续在全球范围内普及应用。尽管如今市场上有许多免费的企业邮箱供用户和企业选用&#xff0c;但其中许多产品在特定场景下的专业化功能尚显不足&#…...

Cave Cows 3

题目描述 约翰的 N (1≤N≤50000 )只牛在一个黑魃魃的洞里探险&#xff0c;他们只能通过叫声交流。 两只牛之间的曼哈顿距离决定了声音传播的时间。即牛1与牛2交流&#xff0c;需要的时间为 ∣x1​−x2​∣∣y1​−y2​∣ 。其中 −2≤106−106≤x1​,x2​,y1​,y2​≤106 。…...

Java程序设计2023-第四次上机练习

8-1三子棋 编写程序&#xff0c;实现简单的三子棋游戏。在三子棋中&#xff0c;双方在33的棋盘中轮流下棋&#xff0c;一方用*示&#xff0c;另一方用O表示。如果一方的3个棋子占据了同一行&#xff0c;同一列或者对角线&#xff0c;则该方获胜。如果棋盘已被棋子占满&#xf…...

nonaDlA 逻辑分析仪 使用记录

注意事项&#xff0c;很灵敏&#xff0c;不要用手碰&#xff0c;产生误触发 安装软件 github地址 官方提供的淘宝地址与使用说明 1.安装 1.安装程序 &#xff1a;下载githubDLA源码&#xff0c;打开 software\PulseView.exe安装 2.安装驱动&#xff1a;安装完第一步后&a…...

用HFSS仿真平面线圈的电感量

用HFSS工具仿真平面线圈的电感量 平面线圈是指在平面上绕制而成的线圈&#xff0c;如PCB上的电感线圈、无线供电使用的金属丝绕制而成的线圈等。根据线圈的不同形状可将平面线圈分为方形线圈&#xff0c;六角形线圈、八角形线圈、螺旋原型线圈等。 网络上的计算平面线圈电感量…...

字节面试题——数据库, linux

数据库 1.sq|语句取-一个月内的id分组取-一个年级中每个班级年龄最小的同学名字成绩表输出前三名的 成绩&#xff0c;后三名呢拷贝A表的数据到B表查询每1 ]科目都大于80分的学生名字筛选出每个小时 的记录考察where考察聚合函数where和having的区别-一个数据库sq|查询重复个数…...

ES基础知识

ES基础知识 单独查询一个文档&#xff08;_doc&#xff09;时&#xff0c;Elasticsearch 会返回该文档的原始数据&#xff0c;通常以 JSON 格式呈现。以下是一些常见字段及其含义&#xff1a; _index: 表示文档所属的索引名称。_type (在较早的 Elasticsearch 版本中使用&…...

当年很流行,现在已经淘汰的前端技术有哪些?

近几年&#xff0c;前端技术真可谓是飞速发展&#xff0c;不断有新的技术涌现&#xff0c;爆火的前端框架 Astro&#xff0c;前端运行时 Bun&#xff0c;构建工具 Vite 等都给前端提供了强大动力。当然&#xff0c;也有很多前端技术随着技术的发展不再需要使用&#xff0c;有了…...

IP地址定位是什么?有哪些优缺点?

IP地址定位是一种用于确定设备或用户地理位置的方法&#xff0c;具有一些明显的优点和缺点。以下是IP地址定位的优缺点&#xff1a; 优点&#xff1a; 广泛适用性&#xff1a; IP地址定位适用于几乎所有与互联网连接的设备&#xff0c;包括计算机、智能手机、平板电脑和物联网…...

scrapy爬虫之网站图片爬取

Scrapy是一个强大的Python爬虫框架&#xff0c;可以用于爬取网站上的各种数据&#xff0c;包括图片。以下是一个简单的示例&#xff0c;演示如何使用Scrapy来爬取网站上的图片&#xff1a; 安装Scrapy&#xff1a; 如果尚未安装Scrapy&#xff0c;可以使用以下命令安装它&…...

flask整合rabbitMQ插件的方式

文章目录 二、Python-flask-rabbitMQ-插件方式整合引言具体步骤1 安装依赖&#xff1a;2 编写实体类&#xff1a;3 编写消费者和生产者&#xff1a;4 初始化消费者和生产者&#xff1a;5 其他地方使用生产者 二、Python-flask-rabbitMQ-插件方式整合 引言 当今互联网应用的高…...

【React】高频面试题

1. 简述下 React 的事件代理机制&#xff1f; React使用了一种称为“事件代理”&#xff08;Event Delegation&#xff09;的机制来处理事件。事件代理是指将事件处理程序绑定到组件的父级元素上&#xff0c;然后在需要处理事件的子元素上触发事件时&#xff0c;事件将被委托给…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...