linux进程之进程的优先级➕环境变量

文章目录

  • 1.优先级的认识
    • 1.1优先级的介绍
    • 1.2初识优先级
    • 1.3ps指令
    • 1.4查看/修改进程的优先级
    • 1.5对优先级的认识
    • 1.6对进程的深一步理解
  • 2.环境变量
    • 2.0环境变量相关的命令
    • 2.1环境变量的概念
    • 2.2常见/查看环境变量
    • 2.3环境变量的作用
    • 2.4修改环境变量
      • 1.将zombie可执行程序放到PATH现有的路径下(不建议)
      • 2. 把当前可执行程序的路径放到PATH中(只在本次登录有效)
    • 2.5查看所有环境变量
    • 2.6环境变量的组织方式
    • 2.6通过代码获取环境变量
      • 1.main()函数的参数
        • 1.1环境变量参数--env
        • 1.2命令行参数---argc/argv
          • 1.初识main()命令行参数
          • 2.命令行参数的应用
      • 2.第三方全局变量environ获取
      • 3.通过系统调用获取环境变量
    • 2.7局部变量
      • 1.介绍
      • 2.应用--shell脚本

1.优先级的认识

1.1优先级的介绍

为什么要有优先级?

  • CPU资源有限,被执行的进程很多,需要通过某种方式竞争资源。
  • 配置进程优先级对多任务环境的linux很有用,可以改善系统性能。
  • 把某些不重要的进程运行到指定的CPU上,大大改善系统整体性能

什么是优先级?

  1. 用来确定CPU资源分配的先后顺序
  2. 调度器调度进程到CPU执行的指标
  3. 进程的优先级在有评判方的存在时才有意义 如高考存在时 班级第一名才有"第一"的意义
  4. 可以用数据来表明优先级 如1,2,3…
  5. 他也是PCB中成员属性
    在这里插入图片描述

1.2初识优先级

1.3ps指令

Linux的ps指令是用来查看系统进程的命令,类似于Windows任务管理器中查看到的进程的功能
在这里插入图片描述
ps -al : 查看当前会话的进程
UID: user id 执行者的身份
PRI: priority 进程的优先级/程序被CPU执行的先后顺序 默认是80 值越小优先级越高 越早被执行
NI: nice nice值 进程优先级的修正数值

  1. PRI(new) = PRI(old) + nice
  2. nice值为负值,优先级值变小,优先级变高,越快被执行
  3. 调整进程优先级,在Linux下就是调整进程nice值
  4. nice取值范围是-20~19,共40个级别。
  5. 进程的nice值不是进程的优先级,进程nice值会影响进程的优先级变化
  6. nice值是进程优先级的修正数据

1.4查看/修改进程的优先级

法一:

cmd: top r PID nice-value
进入任务管理器 按r 进入重新设值模式 输入目标进程的PID 按回车 输入新nice

法二

在这里插入图片描述
在这里插入图片描述
renice指令: 运行时调nice值

法三:

nice: 启动时调

法四:

系统接口: setproority/getpriority

1.5对优先级的认识

  1. CPU在意的不是谁的优先级最高 而是想让每个进程的优先级趋于平衡 让所有进程运行时可被雨露均沾
  2. 如果有进程优先级差距太大 会导致这一进程每次最先被执行 这会打破平衡

1.6对进程的深一步理解

  1. 竞争性: 系统进程数目众多,CPU资源只有少量,甚至1个,进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级
  2. 独立性: 多进程运行,独享各种资源,多进程运行期间互不干扰 [QQ卡壳不影响WeChat/父进程子进程也是具有独立性的(虽然共享了代码)]
  3. 并行: 多个进程在多个CPU下同时运行,这称之为并行

在这里插入图片描述

  1. 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程得以推进,称之为并发

一个进程并不是在CPU上执行结束才离开的 理解:

  1. 每个进程都有被允许允许的时间限制 ---- 时间片 时间达标不在执行
  2. 未达到时间限制 但自己不想执行了 可以出让给下一进程
  3. 未达到时间限制 但下一进程比自己优先级高 自己的时间片被抢占

在这里插入图片描述

对进程切换的理解

在这里插入图片描述

  1. 进程被CPU调度执行 CPU中的寄存器要存储进程的临时数据 如:函数栈帧首尾记录寄存器 函数传值返回拷贝寄存器 寄存器中存储的临时数据叫做此进程的上下文
  2. 因为多进程需要不断切换 所以要考虑切换时上下文的去向
  3. 切换过程中 上下文不可被丢弃 而是进程被切换下来时 带走自己的上下文
  4. 带走的目的: 为了再次执行时 恢复自己的上下文 继续未执行完的操作 虽然中途被切换下来 但是再次被调度时 能像未被打断那样继续执行
  5. CPU内的寄存器只有一份 而多进程有多份上下文 所以这一份寄存器 是给正在被执行的进程使用的
  6. 就好比你去图书馆 来的时候带着自己的书包 走的时候再带走 如果不带走 下次来极大可能已经没了
  7. 又好比你上大学上到一半 想去参军 那么你走的时候要把自己的东西带走并通知学校保留的你学籍 退伍时可以继续学习

2.环境变量

2.0环境变量相关的命令

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

2.1环境变量的概念

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数
环境变量通常具有某些特殊用途具有特定功能,在系统当中通常具有全局特性

如:C/C++代码链接的时候,不知道所链接的动态静态库在哪里,但是照样可以链接成功生成可执行程序,原因就是有相关环境变量帮助编译器进行查找

2.2常见/查看环境变量

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

echo $NAME //NAME:环境变量名称
在这里插入图片描述

2.3环境变量的作用

在xshell下 使用ls指令有两种方式 带路径/不带路径

在这里插入图片描述

前面我们已经了解到 ls也是个可执行程序 那为什么我们写的可执行程序不能不带路径运行呢

在这里插入图片描述

回答:

PATH: 运行ls指令时 会在PATH下查找ls的路径 找到后开始运行此路径下的ls

2.4修改环境变量

1.将zombie可执行程序放到PATH现有的路径下(不建议)

  1. 实际上是把你自己写的可执行程序安装到了指定路径
  2. 污染环境变量已配置好的路径下的命令池: 已配置好的如ls/pwd/touch等 把自己的可执行程序放进去毫无用处

2. 把当前可执行程序的路径放到PATH中(只在本次登录有效)

在这里插入图片描述

在这里插入图片描述

2.5查看所有环境变量

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6环境变量的组织方式

每个程序都会收到一张环境表(一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串)
在这里插入图片描述

2.6通过代码获取环境变量

1.main()函数的参数

argc,*argv: 命令行参数    *env: 环境变量参数: 每一个进程启动时 启动该进程的进程传递的环境变量信息以env参数传导
int main(int argc, char* argv[],char* env[])
{
	return 0;
}
1.1环境变量参数–env

在这里插入图片描述
在这里插入图片描述

1.2命令行参数—argc/argv
1.初识main()命令行参数

在这里插入图片描述

在这里插入图片描述

2.命令行参数的应用

在这里插入图片描述

在这里插入图片描述

命令行参数的意义/作用

  1. 让一个程序通过不同的选项调用特定的语句实现不同的功能
  2. linux的指令ls/pwd/touch等都是由命令行参数编写的 他们一个个都是可执行程序 且可以搭配不同的选项实现不同的功能

在父进程下写的指令如 ./arg -a 子进程的程序是如何拿到的?

父进程bash先获取 然后传给子进程
换言之 命令行参数也是子进程的父进程

2.第三方全局变量environ获取

libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,使用时要用extern声明。
在这里插入图片描述

在这里插入图片描述

#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
extern char **environ;
int i = 0;
for(; environ[i]; i++){
printf("%s\n", environ[i]);
}
return 0;
}

3.通过系统调用获取环境变量

在这里插入图片描述

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

当前进程的环境变量信息是从哪来的?

是父进程传的 从父进程那里继承得来的

如何证明?

  1. 当登录服务器时 OS会将配置文件中的环境变量给bash(父进程)
  2. 在bash下 执行可执行程序时的进程是bash的子进程 子进程的环境变量继承于父进程
  3. Linux下,父进程和子进程类似目录和文件组成一棵多叉树 由于环境变量是子进程继承父进程 所以环境变量具有全局属性
  4. 在终端下执行一个可执行程序./test 显示进程的PID可以看到test进程的父进程就是bash
  5. 在父进程即bash下执行export hello = 你好 在test.c中编写代码: printf("%s\n", getenv("hello"));命令行执行env | grep hello 会显示hello = 你好 运行test会输出你好
  6. 在bash父进程下导出一个环境变量 子进程下的代码可以输出 由此得知 子进程的环境变量是继承父进程的

2.7局部变量

1.介绍

set: 获取bash创建时所有变量
env: 只获取环境变量
在这里插入图片描述
ape被称为局部普通变量 是命令行独有的 不可以向上面的hello在代码运行时输出
ape前+export可以修订为环境变量(具有全局属性可以被子进程继承)

2.应用–shell脚本

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

牛客-- 求解立方根python

描述 计算一个浮点数的立方根&#xff0c;不使用库函数。 保留一位小数。 数据范围&#xff1a;∣val∣≤20 输入描述&#xff1a; 待求解参数&#xff0c;为double类型&#xff08;一个实数&#xff09; 输出描述&#xff1a; 输出参数的立方根。保留一位小数。 使用…

CCF CSP认证 历年题目自练Day47

题目 试题编号&#xff1a; 201712-3 试题名称&#xff1a; Crontab 时间限制&#xff1a; 10.0s 内存限制&#xff1a; 256.0MB 样例输入 3 201711170032 201711222352 0 7 * * 1,3-5 get_up 30 23 * * Sat,Sun go_to_bed 15 12,18 * * * have_dinner 样例输出 201711170…

shopee选品工具:Shopee选品工具—知虾精准选品与科学运营的利器

在如今竞争激烈的电商市场中&#xff0c;如何进行精准选品和科学运营成为了每个卖家都需要面对的问题。而Shopee选品工具——知虾&#xff0c;作为一款强大的大数据采集及分析平台&#xff0c;为卖家提供了全面的市场分析、产品分析和店铺分析功能&#xff0c;帮助卖家发现市场…

​软考-高级-系统架构设计师教程(清华第2版)【第19章 大数据架构设计理论与实践 (P691~716)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第19章 大数据架构设计理论与实践 &#xff08;P691~716&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

ARDUINO UNO 12颗LED超酷流水灯效果

效果代码&#xff1a; #define t 30 #define t1 20 #define t2 100 #define t3 50 void setup() { // set up pins 2 to 13 as outputs for (int i 2; i < 13; i) { pinMode(i, OUTPUT); } } /Effect 1 void loop() { effect_1(); effect_1(); effect_…

机器人制作开源方案 | 智能快递付件机器人

一、作品简介 作者&#xff1a;贺沅、聂开发、王兴文、石宇航、盛余庆 单位&#xff1a;黑龙江科技大学 指导老师&#xff1a;邵文冕、苑鹏涛 1. 项目背景 受新冠疫情的影响&#xff0c;大学校园内都采取封闭式管理来降低传染的风险&#xff0c;导致学生不能外出&#xff0c…

Microsoft SQL Server Management Studio(2022版本)启动无法连接到服务器

Microsoft SQL Server Management Studio&#xff08;2022版本&#xff09;启动无法连接到服务器 解决方法&#xff1a; 打开SQL Server 2022 配置管理器。 启动即可。

视频剪辑技巧:轻松搞定视频随机合并,一篇文章告知所有秘诀

在视频制作的过程中&#xff0c;视频随机合并是一种创新的剪辑手法&#xff0c;它打破了传统的线性剪辑模式&#xff0c;使得视频剪辑更加灵活和有趣。通过将不同的视频片段随机组合在一起&#xff0c;我们可以创造出独特的视觉效果和情感氛围。这种剪辑方式让观众在观看视频时…

Web之HTML笔记

Web之HTML、CSS、JS Web标准一、HTML&#xff08;超文本标记语言&#xff09;HTML 基本结构标签常用标签1.font标签2.p标签3.注释4.h系列标题5.img6.超链接a7.列表8.表格9.表单 Web之CSS笔记 Web标准 结构标准用于对网页元素进行整理和分类(HTML)表现标准用于设置网页元素的版…

二维码智慧门牌管理系统升级解决方案:门牌聚合,让管理更便捷!

文章目录 前言一、传统门牌管理系统的瓶颈二、地图门牌聚合展示的优势三、地图门牌聚合展示的实现方法四、智慧门牌管理系统的未来发展 前言 随着城市的发展和建设&#xff0c;对于地址信息的管理变得越来越重要。而智慧门牌管理系统作为管理地址信息的重要工具&#xff0c;其…

SARAS-Net: Scale and Relation Aware Siamese Network for Change Detection

SARAS-Net&#xff1a;用于变化检测的尺度和关系感知的孪生网络 AAAI Chao-Peng Chen, Jun-Wei Hsieh, Ping-Yang Chen, Yi-Kuan Hsieh, Bor-Shiun Wang 2023 摘要&#xff1a;变化检测(CD)旨在找出不同时间两幅图像之间的差异&#xff0c;并输出变化图来表示该区域是否发生了…

中国净初级生产力年度合成产品NPP(MYD17A3H.006)

中国净初级生产力年度合成产品NPP&#xff08;MYD17A3H.006&#xff09;由航天宏图实验室提供&#xff0c;根据NASA MODIS数据&#xff08;MYD17A3H.006&#xff09;通过航天宏图 Smoother计算得到的平滑后NPP产品&#xff0c;解决了影像云雾覆盖、像元异常值等问题。对处理后的…

c语言-浅谈指针(3)

文章目录 1.字符指针变量常见的字符指针初始化另一种字符指针初始化例&#xff1a; 2.数组指针变量什么是数组指针变量数组指针变量创建数组指针变量初始化例&#xff08;二维数组传参的本质&#xff09; 3.函数指针变量什么是函数指针变量呢&#xff1f;函数指针变量创建函数指…

SpringSecurity6 | 自动配置(下)

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Java从入门到精通 ✨特色专栏&#xf…

我叫:冒泡排序【JAVA】

1.什么是冒泡排序&#xff1f; 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后&#xff08;从下标较小的元素开始)&#xff0c;依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。 2.来个实战应用 我们…

从键盘输入5个学生的信息(姓名、学号、成绩), 存入一个结构体数组中,计算平均分,并按成绩 高低排序并输出.

代码如下 #include<stdio.h> #include<string.h> #include<stdlib.h> /* 1.练习结构体数组排序   从键盘输入5个学生的信息&#xff08;姓名、学号、成绩&#xff09;,存入一个结构体数组中&#xff0c;计算平均分&#xff0c;并按成绩高低排序并输出. */…

python学习:break用法详解

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 在执行while循环或者for循环时&#xff0c;只要循环条件满足&#xff0c;程序会一直执行循环体。 但在某些场景&#xff0c;我们希望在循环结束前就强制结束循环。 Python中有两种强制结束循环的方法&#xff1a; continue语…

heatmap | cell cycle genes in Seurat

目的&#xff1a;使用bulk 数据&#xff0c;查看HeLa 双胸苷阻断法 细胞同步化 释放 [0, 3, 4.5, 6, 9, 10.5, 12, 15, 18, 19.5, 21, 22.5, 25.5, 30] 小时后 cell cycle 基因的表达情况。 1.结果 S phase G2M phase S G2M phase 不方便看&#xff0c;横过来看&#xff1a;…

Linux下运行Jmeter压测

一、在Linux服务器先安装SDK 1、先从官网下载jdk1.8.0_131.tar.gz&#xff0c;再从本地上传到Linux服务器 2、解压&#xff1a;tar -xzf jdk1.8.0_131.tar.gz&#xff0c;生成文件夹 jdk1.8.0_131 3、在/usr/目录下创建java文件夹&#xff0c;再将 jdk1.8.0_131目录移动到/u…

【操作系统】磁盘物理地址怎么表示

常见主存物理地址是一串01串&#xff0c;那磁盘物理地址呢&#xff1f; 磁盘物理地址由以下组成&#xff1a; 柱面号磁头号扇区号 重点知识点辨析&#xff1a; 磁盘物理地址的翻译是由磁盘驱动程序进行的&#xff0c;目的是将逻辑上的蔟号转化为上述的物理地址 408真题溯源…