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脚本

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity在Windows选项下没有Auto Streaming

Unity在Windows选项下没有Auto Streaming Unity Auto Streaming插件按网上说的不太好使最终解决方案 Unity Auto Streaming插件 我用的版本是个人版免费版&#xff0c;版本号是&#xff1a;2021.2.5f1c1&#xff0c;我的里边Windows下看不到Auto Streaming选项,就像下边这张图…

ThinkPHP 系列漏洞

目录 2、thinkphp5 sql注入2 3、thinkphp5 sql注入3 4、 thinkphp5 SQL注入4 5、 thinkphp5 sql注入5 6、 thinkphp5 sql注入6 7、thinkphp5 文件包含漏洞 8、ThinkPHP5 RCE 1 9、ThinkPHP5 RCE 2 10、ThinkPHP5 rce3 11、ThinkPHP 5.0.X 反序列化漏洞 12、ThinkPHP…

原型网络Prototypical Network的python代码逐行解释,新手小白也可学会!!-----系列8

文章目录 前言一、原始代码二、对每一行代码的解释&#xff1a;总结 前言 这是该系列原型网络的最后一段代码及其详细解释&#xff0c;感谢各位的阅读&#xff01; 一、原始代码 if __name__ __main__:##载入数据labels_trainData, labels_testData load_data() # labels_…

Linux下非root用户安装CUDA

目录 前言 参考链接 步骤 一. 首先&#xff0c;需要查看系统版本&#xff1a; 二. 安装包下载。 下载CUDA&#xff1a; cuDNN下载 三. 开始安装CUDA和cuDNN 安装CUDA 修改环境变量 安装 cuDNN 查看是否安装成功&#xff0c;输入nvcc -V 前言 由于一些代码实现&…

消息消费过程

前言 本文介绍下Kafka消费过程, 内容涉及消费与消费组, 主题与分区, 位移提交&#xff0c;分区再平衡和消费者拦截器等内容。 消费者与消费组 Kafka将消费者组织为消费组, 消息只会被投递给消费组中的1个消费者。因此, 从不同消费组中的消费者来看, Kafka是多播(Pub/Sub)模式…

十三、Docker的安装

0.安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道…

CTFhub-RCE-过滤cat

查看当前目录&#xff1a;输入:127.0.0.1|ls 127.0.0.1|cat flag_42211411527984.php 无输出内容 使用单引号绕过 127.0.0.1|cat flag_42211411527984.php|base 64 使用双引号绕过 127.0.0.1|c""at flag_42211411527984.php|base64 使用特殊变量绕过 127.0.0.…

第四篇 《随机点名答题系统》——基础设置详解(类抽奖系统、在线答题系统、线上答题系统、在线点名系统、线上点名系统、在线考试系统、线上考试系统)

目录 1.功能需求 2.数据库设计 3.流程设计 4.关键代码 4.1.设置题库 4.1.1数据请求示意图 4.1.2选择题库&#xff08;index.php&#xff09;数据请求代码 4.1.3取消题库&#xff08;index.php&#xff09;数据请求代码 4.1.4业务处理Service&#xff08;xztk.p…

计算机的发展

硬件的发展 第一台电子数字计算机&#xff1a;ENIAC&#xff08;1946&#xff09;&#xff0c;作者&#xff1a;冯诺依曼&#xff0c;逻辑元件&#xff1a;电子管 bug&#xff1a;小虫子&#xff0c;会影响打点 Intel&#xff1a; 机器字长&#xff1a;计算机一次整数运算所能…

企业计算机服务器中了mallox勒索病毒怎么解决,勒索病毒解密文件恢复

随着科技技术的不断发展&#xff0c;网络技术得到了快速提升&#xff0c;但网络安全威胁也不断增加&#xff0c;近期&#xff0c;云天数据恢复中心陆续接到很多企业的求助信息&#xff0c;企业的计算机服务器遭到了mallox勒索病毒攻击&#xff0c;导致企业的所有业务中断&#…

[nlp] 损失缩放(Loss Scaling)loss sacle

在深度学习中,由于浮点数的精度限制,当模型参数非常大时,会出现数值溢出的问题,这可能会导致模型训练不稳定。为了解决这个问题,损失缩放(Loss Scaling)技术被引入,它通过缩放损失值来解决这个问题。 在深度学习中,损失缩放技术通常是通过将梯度进行缩放来实现的。具…

鸿蒙APP外包开发上线流程

鸿蒙系统的上线流程可能会根据具体的版本和平台要求而略有不同。在进行上线之前&#xff0c;开发人员应该详细了解并遵循鸿蒙生态系统的相关规定和要求。鸿蒙&#xff08;HarmonyOS&#xff09;应用的上线流程通常包括以下步骤&#xff0c;希望对大家有所帮助。北京木奇移动技术…

【深度学习】pytorch快速得到mobilenet_v2 pth 和onnx

在linux执行这个程序&#xff1a; import torch import torch.onnx from torchvision import transforms, models from PIL import Image import os# Load MobileNetV2 model model models.mobilenet_v2(pretrainedTrue) model.eval()# Download an example image from the P…

安卓中轻量级数据存储方案分析探讨

轻量级数据存储功能通常用于保存应用的一些常用配置信息&#xff0c;并不适合需要存储大量数据和频繁改变数据的场景。应用的数据保存在文件中&#xff0c;这些文件可以持久化地存储在设备上。需要注意的是&#xff0c;应用访问的实例包含文件所有数据&#xff0c;这些数据会一…

Qt6版使用Qt5中的类遇到的问题解决方案

如果有需要请关注下面微信公众号&#xff0c;会有更多收获&#xff01; 1.QLinkedList 是 Qt 中的一个双向链表类。它提供了高效的插入和删除操作&#xff0c;尤其是在中间插入和删除元素时&#xff0c;比 QVector 更加优秀。下面是使用 QLinkedList 的一些基本方法&#xff1a…

微服务学习 | Eureka注册中心

微服务远程调用 在order-service的OrderApplication中注册RestTemplate 在查询订单信息时&#xff0c;需要同时返回订单用户的信息&#xff0c;但是由于微服务的关系&#xff0c;用户信息需要在用户的微服务中去查询&#xff0c;故需要用到上面的RestTemplate来让订单的这个微…

JVM虚拟机:通过日志学习PS+PO垃圾回收器

我们刚才设置参数的时候看到了-XXPrintGCDetails表示输出详细的GC处理日志&#xff0c;那么我们如何理解这个日志呢&#xff1f;日志是有规则的&#xff0c;我们需要按照这个规则来理解日志中的内容&#xff0c;它有两个格式&#xff0c;一个格式是GC的格式&#xff08;新生代&…

YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进【NO.79】改进损失函数为VariFocal Loss

前言 作为当前先进的深度学习目标检测算法YOLOv8&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列文章&#xff0c;将重点对YOLOv8的如何改进进行详细的介绍&…

Egress-TLS-Origination

目录 文章目录 目录本节实战1、出口网关TLS发起2、通过 egress 网关发起双向 TLS 连接关于我最后 本节实战 实战名称&#x1f6a9; 实战&#xff1a;Egress TLS Origination-2023.11.19(failed)&#x1f6a9; 实战&#xff1a;通过 egress 网关发起双向 TLS 连接-2023.11.19(测…

CDN是什么,能起到什么作用

随着互联网的快速发展&#xff0c;用户对于快速、稳定、高效的互联网体验的需求日益增长。为了满足这一需求&#xff0c;内容分发网络&#xff08;CDN&#xff09;应运而生&#xff0c;并在近年来得到了广泛应用。CDN通过在全球范围内部署大量的服务器和网络节点&#xff0c;实…