【Linux】进程优先级 进程切换 环境变量

news2024/11/18 9:22:40

目录

一、进程优先级

 1、优先级概念

 2、优先级特点

 3、修改Linux下的优先级

二、进程切换

 1、进程特性

 2、进程切换

三、环境变量

 1、基本概念

 2、常见环境变量

 3、查看环境变量方法

 4、PATH环境变量

 5、和环境变量相关的命令

 6、环境变量的组织方式

 7、通过代码如何获取环境变量

 8、通过系统调用获取或设置环境变量

 9、环境变量通常是具有全局属性的


一、进程优先级

 1、优先级概念

  • CPU 资源分配的先后顺序,就是指进程的优先权(priority);
  • 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的 Linux 很有用,可以改善系统性能;
  • 还可以把进程运行到指定的 CPU 上,这样一来,把不重要的进程安排到某个 CPU,可以大大改善系统整体性能.

 2、优先级特点

  1. 进程的优先级和状态一样,本质都是PCB里面的一个数字(也可能是多个数字),操作系统通过这些数字来辨别进程的状态和优先级;
  2. 通过 ps -al 指令可以查看到进程的详细信息,PRI 和 NI 的值合并在一起代表 Linux 进程的优先级。PRI 其实就是最终优先级,只不过它受 NI 值的调控。

输入 ps -l 命令后,会显示一下内容

此时可以注意到其中几个重要信息,有下:

  • UID : 代表执行者的身份;
  • PID : 代表这个进程的代号;
  • PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号;
  • PRI :代表这个进程可被执行的优先级,其值越小越早被执行
  • NI :代表这个进程的 nice 值。
  • PRI 也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高。
  • 那NI呢?就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值。
  • PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice。
  • 这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行。
  • 所以,调整进程优先级,在Linux下,就是调整进程nice值,nice其取值范围是-20至19,一共40个级别。

Linux 给我们提供了修改 进程 优先级的权限,目的就是让我们对多任务运行进行合理处理,提高系统运行效率。

注意:(1)进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化;(2)可以理解nice值是进程优先级的修正修正数据。

 3、修改Linux下的优先级

先输入top,进入top后,按‘r’,然后输入进程PID,输入nice值。

(1)输入 top 指令

(2) 输入 r 

(3) 输入进程的 id

(4)输入 NI 值(例如:NI = -10) 

结果:PRI(新的) = PRI(旧的) + NI(-10) = 70 

注意:普通用户无法直接修改NI的值,必须切换成root用户或者使用sudo提权执行top指令。

二、进程切换

 1、进程特性

  • 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高 效完成任务,更合理竞争相关资源,便具有了优先级;
  • 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰;
  • 并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行;
  • 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发.

 2、进程切换

(1) 一个CPU里面存在一套硬件寄存器,寄存器分为用户可见的寄存器,用户不可见的寄存器。

(2) 计算机调度某个进程时,CPU 会把这个进程的 PCB 地址加载到某个寄存器,也就是说,CPU内有寄存器可以只找到进程的PCB地址。

(3) CPU里有一个 eip 寄存器(PC指针),指向当前执行指令的下一条指令的地址。

(4) 当进程在运行的时候,一定会产生非常多的临时数据,这些临时数据只属于当前进程,虽然CPU内部只有一套寄存器硬件,但是寄存器里面保存的数据是属于当前进程的,寄存器硬件和寄存器内的数据是两码事

(5) 进程在调度的时候占有CPU,但是却不是一直占有到进程结束,进程都有自己的时间片!因为时间片的存在,进程会出现没有被执行完就被拿下去的情况。

(6) 在进程重新被CPU调度的时候,CPU必须知道上一次这个进程运行到哪,当进程被换下去的时候,进程的运行信息会被存在操作系统里面,以便下次CPU重新调度时进程能够正常运行,这叫做进程的上下文保护。当进程被CPU重新调度上来时,首先要做的第一件事情就是读取操作系统中进程运行的相关数据,这叫做进程的上下文恢复

三、环境变量

 1、基本概念

  • 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找;
  • 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。

 2、常见环境变量

  • PATH : 指定命令的搜索路径;
  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录;
  • SHELL : 当前Shell,它的值通常是/bin/bash。

 3、查看环境变量方法

我们可以通过指令 echo $NAME 来查看当前环境变量信息(NAME :环境变量名)

//查看用户信息
echo $USER
//查看PATH环境变量
echo $PATH

 4、PATH环境变量

  (1)直接添加PATH环境变量

  (2)使用 export 命令添加

注意:我们不能直接写成这样:export PATH=/home/xqh/dir,这样会导致把系统默认的环境变量PATH覆盖掉,我们默认的那些指令就不能直接使用了,只能通过指定路径的方式来使用(关掉Xshell,重新打开,就恢复了)。

 5、和环境变量相关的命令

  1. echo: 显示某个环境变量值;
  2. export: 设置一个新的环境变量;
  3. env: 显示所有环境变量;
  4. unset: 清除环境变量;
  5. set: 显示本地定义的shell变量和环境变量。

  1、查看所有的环境变量:env 指令

  2、也可以通过set 指令来查看环境变量表,不过还会多很多信息,包括本地环境变量等。 

  环境变量 具有全局属性,可以供所有子进程共享,倘若我们不想让 环境变量 被共享,可以设置本地变量。

$ TEST=private  //可以直接在命令行中添加本地变量。

 

现在的 TEST 环境变量是不被子进程共享的。

$ unset TEST  //移除已设置的本地环境变量

想让 TEST 进入 环境变量表,只用加上 export 关键字。

$ export TEST=public     // 此时环境变量已经加入到环境变量表中。

 6、环境变量的组织方式

  环境变量表是以指针数组的形式存储的。

 7、通过代码如何获取环境变量

  我相信大家心中想的 main 函数是无参的形式,实际上main函数是可以传参的,并且最多可以传 3 个参数。

int argc, char *argv[], char *env[]

  • 我们可以通过上面的3个参数来获取环境变量。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char* argv[], char* env[])
{
	int i = 0;
	for (; env[i]; i++) 
    {
		printf("%s\n", env[i]);
	}
	return 0;
}

  •   还可以通过第三方变量 environ 获取
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
	extern char** environ;
	int i = 0;
	for (; environ[i]; i++) 
    {
		printf("%s\n", environ[i]);
	}
	return 0;
}

注意:libc 中定义的全局变量 environ 指向环境变量表,environ 没有包含在任何头文件中,所以在使用时要用 extern 声明。

 8、通过系统调用获取或设置环境变量

  • getenv
  • putenv

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char* env = getenv("PATH");
	printf("%s\n", env);
	return 0;
}


  通过以上运行,可以看到既可以用函数 getenv() 来获取,也可以使用 echo $环境变量名 来获取。

 9、环境变量通常是具有全局属性的

  • 环境变量通常具有全局属性,可以被子进程继承下去。
#include <stdio.h>
#include <stdlib.h>
int main()
{
	char* env = getenv("MYENV");
	if (env) 
    {
		printf("%s\n", env);
	}
	return 0;
}

运行如下: 

直接查看,发现没有结果,说明该环境变量根本不存在。

然后,导出环境变量 export MYENV="hello world" ,此时再次运行程序,发现有结果了!

说明:环境变量是可以被子进程继承下去的!

 


本文要是有不足的地方,欢迎大家在下面评论,我会在第一时间更正。

老铁们,记着点赞加关注!!!   

 

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

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

相关文章

io.netty学习(十一)Reactor 模型

目录 前言 传统服务的设计模型 NIO 分发模型 Reactor 模型 1、Reactor 处理请求的流程 2、Reactor 三种角色 单Reactor 单线程模型 1、消息处理流程 2、缺点 单Reactor 多线程模型 1、消息处理流程 2、缺点 主从Reactor 多线程模型 主从Reactor 多线程模型示例 1…

索尼笔记本U盘重装Win10系统教程图解

很多使用索尼笔记本的用户想要给笔记本重装一下Win10系统&#xff0c;但不清楚具体要怎么操作&#xff0c;首先用户需要确保自己的索尼笔记本电脑能够正常联网&#xff0c;还需要准备一个8G以上的U盘&#xff0c;接着按照小编分享的索尼笔记本U盘重装Win10系统教程图解操作&…

怎么高效的通过爬虫获取数据

导语&#xff1a;在当今数字化时代中&#xff0c;获取数据已成为许多企业和个人的重要需求。在快速获取数据时&#xff0c;通过爬虫技术迅速获取网络数据已成为一项重要的技能和技术。然而&#xff0c;在应用爬虫技术前&#xff0c;需要注意一些重要的问题。本文总结了从数据来…

九大数据结构

数据结构想必大家都不会陌生&#xff0c;对于一个成熟的程序员而言&#xff0c;熟悉和掌握数据结构和算法也是基本功之一。数据结构本身其实不过是数据按照特点关系进行存储或者组织的集合&#xff0c;特殊的结构在不同的应用场景中往往会带来不一样的处理效率。 常用的数据结…

IDEA上面书写wordcount的Scala文件具体操作

系列文章目录 IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍_intellij 创建scala 目录 系列文章目录 1、编写Scala程序 2、更换pom.xml文件 3、更新Maven的依赖文件 4、执行代码即可 总结 前言 本文主要在上述文章的基础上编辑和创建一个WordCount应…

Linux常用命令——ftp命令

在线Linux命令查询工具 ftp 用来设置文件系统相关功能 补充说明 ftp命令用来设置文件系统相关功能。ftp服务器在网上较为常见&#xff0c;Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件&#xff0c;这里详细介绍Linux ftp命令的一些经常使用的命令…

【23-06-25:window基础命令学习】

目录 命令提示符cd /? 查看cd 语法 切换文件目录cd /d d:\ 改变当前的驱动器到D盘&#xff0c; 根目录切换到D盘&#xff0c;因为改变了驱动器&#xff0c;所以需要加上 /dDIRmd 命令 创建目录&#xff08;文件夹&#xff09; &#xff0c;也可以直接创建多级子目录![在这里插…

MySql进阶篇(1)

MySql进阶篇 一、存储引擎1.1 MySql体系结构1.2 存储引擎的简介1.3 存储引擎的特点1.3.1 innoDB1.3.2 MyISAM1.3.3 Memory1.3.4 上述总结 1.4 存储引擎的选择 二、索引2.1 索引的概述2.2 索引结构2.2.1 二叉树和红黑树2.2.2 B-Tree&#xff08;多路平衡查找树&#xff09;2.2.3…

基于Java+Swing实现天气预报系统

基于JavaSwing实现天气预报系统 一、系统介绍二、功能展示1.主面2.IP定位城市3.通过城市名称查询天气状态4、查看各城区的天气 三、代码展示四、其他系统五、获取源码 一、系统介绍 系统主要通过输入城市名字&#xff08;可通过电脑IP查询所属城市&#xff0c;查询所属城市IP接…

Linux系统编程(exec函数家族和system函数)

文章目录 前言一、exec函数家族二、system函数介绍三、system函数使用总结 前言 本篇文章我们继续讲解多进程编程中的&#xff0c;exec函数家族和system函数。 一、exec函数家族 exec 函数家族是一组在类Unix操作系统中常用的函数&#xff0c;用于在当前进程中执行一个新的程…

STM32模拟I2C协议获取HDC1080温度和湿度传感器数据

STM32模拟I2C协议获取HDC1080温度和湿度传感器数据 HDC1080是一款温湿度传感器&#xff0c;具有如下特点&#xff1a; 其中温度和湿度经过出厂校准。这里介绍STM32模拟I2C总线协议访问HDC1080的HAL库实现范例。 HDC1080电路连接 HDC1080的内部原理及电路连接如下&#xff1…

GIS 功能模块设计

文章目录 1 .地图渲染2. 地图控制设备管理模块设计1 . 导航树管理2. 查询定位功能3. 资源管理功能4 . 入沟管理管线业务功能模块设计1 .轨迹图管理2. 单线图管理3. 设备接线图管理4. 工井立视图管理其他管理模块1 .用户管理功能2. 数据导入功能 1 .地图渲染 主要解决将指定的空…

16个小的UI设计规则却能产生巨大的影响

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势&#xff0c;学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录&#xff0c;有一线大厂面试完整考点、资料以及我的系列文章。 快来免费体验ChatGpt plus版本的&#xff0c;我们出的钱 体验地…

最新导则下生态环评报告编制技术(报告篇、制图篇、指数篇、综合应用)

根据生态环评内容庞杂、综合性强的特点&#xff0c;依据生态环评最新导则&#xff0c;将内容分为4大篇章(报告篇、制图篇、指数篇、综合篇)、10大专题(生态环评报告编制、土地利用图的制作、植被类型及植被覆盖度图的制作、物种适宜生境分布图的制作、生物多样性测定、生物量及…

VUE L 条件列表渲染 ⑧

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs条件渲染列表渲染 基本列表 Key的原理 列表过滤 列表排序 列表更新小问题 监测数据改变的原理~对象 V u e S e t VueSet VueSet的…

游戏业务使用什么防护最安全 110.42.3.X

近几年&#xff0c;随着网络的发展&#xff0c;游戏行业也发展迅速&#xff0c;游戏成为人们空闲时间最主要的娱乐项目。网络游戏也成为收入可观的产业。可观的盈利也带来了严峻的问题&#xff0c;网络游戏目前也是网络安全的重灾区&#xff0c;是黑客的主要攻击对象。 有矛就有…

这个端午节,我们用AI创作了有趣的画作

端午节期间&#xff0c;小伙伴们都是如何安排的&#xff1f; 小灰在自己创立的知识星球ChatGPT与AI绘画上面&#xff0c;搞了一场有趣的比赛&#xff1a; 请球友们利用AI绘画平台&#xff0c;创作出一幅端午节相关的图画&#xff0c;比一比谁画得更好。 知识星球的小伙伴们踊跃…

Vue3项目中锚点定位实现

代码 <!doctype html> <html class"no-js"><head><meta charset"utf-8"><title>锚点</title><script src"https://unpkg.com/vue3/dist/vue.global.js"></script><link rel"styleshee…

FPGA XDMA 中断模式实现 PCIE X8 AD7606采集 提供2套工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案AD7606数据采集和缓存XDMA简介XDMA中断模式QT上位机及其源码 5、vivado工程1--BRAM缓存6、vivado工程2--DDR3缓存7、上板调试验证8、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&am…

加密与解密 调试篇 静态分析技术 (二)重命名/数据转换/字符串/数组/结构体

目录 1.参考重命名 2.标签的用法 3.格式化指令操作数 4.代码和数据转换 5.字符串 6.数组 7.结构体 1.创建结构体 结构体替换例子 可以通过一次操作完成全部工作 2.导入结构体 1.参考重命名 参考重命名是ida极好的一个功能 可以把反汇编清单的默认名称改为有意义的名…