【linux进程】进程优先级命令行参数环境变量

目录

  • 一,进程切换
  • 二,进程优先级
    • 1. 什么是优先级
    • 2. 权限 vs 优先级
    • 3. 为什么要有优先级
    • 4. 优先级的查看方式
  • 三,命令行参数
    • 1. 什么是命令行参数
    • 2. 为什么要有命令行参数
    • 3. 是谁做的
  • 四,环境变量
    • 1. 基本概念
    • 2. 常见环境变量
    • 3. 查看环境变量
    • 4. 对环境变量的再理解
    • 5. getenv和putenv
    • 6. 内建命令

一,进程切换

在操作系统内部,进程切换是一个复杂的过程,在这个过程中CPU里的寄存器发挥了及其重要的作用:

如图,有两个进程:进程1和进程2
在这里插入图片描述
当进程1被CPU调度时,CPU中的所有寄存器会保留进程1的临时数据,CPU内部的所有的寄存器中的临时数据,叫做进程的上下文
假设进程1的时间片到了,不再被调度了,进程1就会被剥离,此时会把寄存器中的上下文内容保存到pcb中,换上进程2。
但是我们要考虑进程1还会恢复啊,就要从上一次进程1运行到的地方继续执行。

结论:
进程在切换,最重要的一件事情是:上下文数据的保护和恢复!

对CPU内的寄存器的理解:

1. 寄存器本身是硬件,具有数据的存储能力,CPU的寄存器硬件只有一套!!
2. CPU内部的数据,可以有多套,有几个进程,就有几套和该进程对应的上下文数据
3. 寄存器!寄存器的内容

二,进程优先级

1. 什么是优先级

优先级:指定进程获取CPU资源的先后顺序。

1. 在运行队列的头部,进程的优先级较高,在队列尾部,优先级较低。
2. 优先级其实是进程中task struct进程控制块的若干个内部字段(属性)。
3. Linux中优先级数字越小,优先级越高。

2. 权限 vs 优先级

权限:能不能的问题
优先级:已经能了,而是获取资源的顺序问题

3. 为什么要有优先级

进程访问的资源(CPU)始终都是有限的。系统中的进程数量大部分情况都是有较多的。

操作系统关于调度和优先级的原则:

1. 现在使用的0S大部分是分时操作系统(基于时间片进行调度轮转),调度时要保证基本的公平
2. 如果进程因为长时间不被调度,就造成了饥饿问题

4. 优先级的查看方式

使用指令: ps -al

在这里插入图片描述

上图中有两个重要的数据:
在这里插入图片描述
使用 top 指令更改nice值,进而改变进程优先级:

进入top后按"r" -> 输入进程PID -> 输入nice值.

注意:

1. nice值不能让你任意调整,而是有范围的![-20,19],一共40个级别。
2. 每次调整优先级的值,都是从进程默认的优先级值开始的。

三,命令行参数

1. 什么是命令行参数

在这里插入图片描述

代码演示:
在这里插入图片描述

2. 为什么要有命令行参数

本质:命令行参数本质是交给我们程序不同的选项,用来定制不同的程序功能
比如指令中会携带很多的选项。

代码演示:
在这里插入图片描述

3. 是谁做的

先说明一个前提:

父进程的数据,默认能被子进程看到并访问!

代码验证:
在这里插入图片描述

修改一下代码并且连续运行这个程序:
在这里插入图片描述

这个id是1246790的进程是谁啊?
在这里插入图片描述

结论:

1. 命令行中启动的程序,都会变成进程,这些进程都是bash 的子进程
2. 所以上面图中的"./myprocess”(路径+程序名称),默认是输入给父进程bash的
这个bash会对命令行字符串进行解释,从而生成那个char * argv[] (那张表)而子进程是可以看见那张表的,进而把它们作为参数

四,环境变量

1. 基本概念

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

2. 常见环境变量

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

我们以PATH变量为例,对环境变量进行理解

查看环境变量里的内容,使用指令:
echo $环境变量

在这里插入图片描述
系统中很多的配置,在我们登录Linux系统的时候,已经被加载到了bash进程中(内存)。
查看PATH环境变量,会出现很多路径,这些路径以冒(:)号为分隔符。

整个长串,表示的是: bash在执行命令的时候,因为要把命令的二进制文件加载到内存,所以需要先找到命令,这一长串就是bash内部维护的命令的默认搜索路径(会依次搜索)

所以现在我们可以知道,为什么在使用指令(1s,pwd…)的时候可以不用加路径,因为它们所在的路径 /usr/bin 是在 bash 的环境变量中的

在这里插入图片描述
这里演示方式2:
在这里插入图片描述

结论:
1. 直接对PATH变量进行赋值会直接覆盖原有的内容!
2.P ATH这种环境变量是内存级的,如果不小心直接把它覆盖了,不用担心,关闭Xshe1l,重新启动又会恢复!!

正确的把指定路径添加到环境变量的操作:
在这里插入图片描述

注意:
(1) 最开始的环境变量不是在内存中,而是在系统的对应的配置文件中!
(2) 在我们登录Linux系统的时候,这些文件会被加载到了bash进程的上下文中,所以要想永久修改环境变量,就要修改这些配置文件!

在这里插入图片描述

其他环境变量的使用:

在这里插入图片描述

3. 查看环境变量

查看系统的所有环境变量,使用指令:env

在这里插入图片描述

也可以自定义环境变量:

导入一个环境变量,使用指令:
export 环境变量=内容

在这里插入图片描述

取消自定义环境变量,使用指令:
unset 环境变量

在这里插入图片描述

4. 对环境变量的再理解

首先看一下系统定义的一个全局环境变量:
在这里插入图片描述

用代码打印出环境变量:
在这里插入图片描述

结论:
那些环境变量,默认在bash内部,./myprocess
是bash的子进程,所以环境变量也是可以被子进程拿到的!!

原理如下:
在这里插入图片描述

结论:
bash进程启动的时候,默认会给我子进程形成两张表:
1.argv[]命令行参数表:来自用户输入的命令行
2.env[]环境变量表:来自0S的配置文件
bash通过各种方式把这两张表交给子进程!!!

所以,既然可以把命令行参数表传给main函数,那传环境变量表当然也可以。
第二种打印环境变量的方式:
(注:main函数最多传三个参数)

在这里插入图片描述

5. getenv和putenv

环境变量具有系统级的全局属性,因为环境变量本身会被子进程继承下去。

getenv: 根据环境变量名,直接拿到一个环境变量内容

使用man手册查看:
在这里插入图片描述

使用方式:
在这里插入图片描述

putenv: 改变或增加一个环境变量

在这里插入图片描述

6. 内建命令

子进程导入一些数据和对数据的修改是不会被父进程看见的,因为进程具有独立性。

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

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

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

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

相关文章

针对线上消息积压的排查思路以及解决方案

一、背景 我们在日常工作中,经常会碰到线上告警,消息队列消息积压了,试想如果对消息的消费速率有要求的场景,消息积压一定会或多或少对自己本身的业务场景有影响,这里就针对消息积压的场景,谈谈具体的排查…

15分钟学 Python 第37天 :Python 爬虫入门(三)

Day 37 : Python爬虫入门大纲 章节1:Python爬虫概述 1.1 什么是爬虫? 网页爬虫(Web Crawler)是一种自动访问互联网上网页并提取数据的程序。爬虫的作用包括搜索引擎索引内容、市场调查、数据分析等。 1.2 爬虫的工作原理 发起…

Vue中使用ECharts实现热力图的详细教程

在数据可视化领域,热力图是一种非常直观的表现形式,它通过颜色深浅来展示数据分布情况。在Vue项目中,我们可以使用ECharts这一强大的图表库来实现热力图。下面我将详细介绍如何在Vue中使用ECharts实现热力图。效果如下图: 一、准备…

Python或R时偏移算法实现

🎯要点 计算单变量或多变量时序距离,使用欧几里得、曼哈顿等函数量化不同时序差异。量化生成时序之间接近度相似性矩阵。使用高尔距离和堪培拉距离等相似度测量。实现最小方差匹配算法,绘制步进模式的图形表示。其他语言包算法实现。 &…

vue3 + ts + cesium:绘制、更新圆 ellipse

本文主要实现基础的绘制圆形,并且可以通过拖动圆心更新圆的位置,拖动圆上的边缘点改变圆的半径。 实现效果: (1)单击鼠标左键开始绘制,确定圆的圆心,移动鼠标,改变圆的半径&#xff…

Mac屏蔽系统更新,取出红点标记如果解锁hosts文件

引言:关闭系统更新,首先应该在系统偏好设置---软件更新---去掉自动更新的选项。即使如此,系统仍然进行macOS系统和自带safari等软件的检测更新,并图标右上角红点点标记提醒我们更新,那我们如果彻底屏蔽更新呢&#xff…

解决 Adobe 盗版弹窗

在这个文件夹下删除 Adobe CCXProcess 然后重装。 Adobe Premiere Pro 2024 (v24.6.1) Multilingual :: Варез от m0nkrusa [Warez by m0nkrus] (monkrus.ws) Adobe Photoshop 2024 (v25.12) Multilingual :: Варез от m0nkrusa [Warez by m0nkrus] (monkrus.…

Spring Boot RESTful API开发教程

一、RESTful API简介 RESTful API是一种基于HTTP协议的Web API,其设计原则是简单、可扩展、轻量级、可缓存、可靠、可读性强。RESTful API通常使用HTTP请求方法(GET、POST、PUT、DELETE等)来操作资源,使用HTTP状态码来表示操作结…

JQuery基本介绍和使用方法

文章目录 JQuery基本介绍和使用方法引入依赖 jQuery语法jQuery选择器jQuery事件操作元素获取/设置元素内容获取/设置元素属性获取/返回css属性添加元素删除元素 JQuery基本介绍和使用方法 W3C 标准给我们提供了⼀系列的函数, 让我们可以操作: ⽹⻚内容⽹⻚结构⽹⻚样式 但是…

案例-猜数字游戏

文章目录 效果展示初始画面演示视频 代码区 效果展示 初始画面 演示视频 猜数字游戏 代码区 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width,…

PostgreSQL Docker Error – 5432: 地址已被占用

PostgreSQL Docker Error – 5432: 地址已被占用 今天在学习【Spring Boot React】价值79.9美元&#xff0c;全栈开发&#xff0c;搭建个人网站、做毕业设计、试试这套课程第17~21节视频的时候&#xff0c;发现运行docker run --name demo-postgres -e POSTGRES_PASSWORDpass…

【C++】类与对象(三)

「前言」 &#x1f308;个人主页&#xff1a; 代码探秘者 &#x1f308;C语言专栏&#xff1a;C语言 &#x1f308;C专栏&#xff1a; C &#x1f308;喜欢的诗句:天行健,君子以自强不息. 目录 一、再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit 关键字 二…

pycharm中使用anaconda创建多环境,无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

问题描述 用的IDE是&#xff1a; 使用anaconda创建了一个Python 3.9的环境 结果使用pip命令的时候&#xff0c;报错 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案 为了不再增加系统变量&#xff0c;我们直接将变量添加在当前项目中你的Ter…

类型转换【C++提升】(隐式转换、显式转换、自定义转换、转换构造函数、转换运算符重载......你想知道的全都有)

更多精彩内容..... &#x1f389;❤️播主の主页✨&#x1f618; Stark、-CSDN博客 本文所在专栏&#xff1a; C系列语法知识_Stark、的博客-CSDN博客 座右铭&#xff1a;梦想是一盏明灯&#xff0c;照亮我们前行的路&#xff0c;无论风雨多大&#xff0c;我们都要坚持不懈。 一…

前端学习第三天笔记 JavaScript JavaScript的引入 数据类型 运算符 条件语句 字符串

这里写自定义目录标题 JavaScriptJavaScript引入到文件嵌入到HTML文件中引入本地独立js文件引入网络来源文件 JavaScript的注释方式嵌入在HTML文件中的注释JavaScript的输出方式数据类型原始类型&#xff08;基础类型&#xff09;合成类型&#xff08;复合类型&#xff09; 运算…

《15分钟轻松学 Python》教程目录

为什么要写这个教程呢&#xff0c;主要是因为即使是AI技术突起的时代&#xff0c;想要用好AI做开发&#xff0c;那肯定离不开Python&#xff0c;就算最轻量级的智能体都有代码块要写&#xff0c;所以不一定要掌握完完整整的Python&#xff0c;只要掌握基础就能应对大部分场景。…

使用VBA快速生成Excel工作表非连续列图片快照

Excel中示例数据如下图所示。 现在需要拷贝A2:A15,D2:D15,J2:J15,L2:L15,R2:R15为图片&#xff0c;然后粘贴到A18单元格&#xff0c;如下图所示。 大家都知道VBA中Range对象有CopyPicture方法可以拷贝为图片&#xff0c;但是如果Range对象为非连续区域&#xff0c;那么将产生10…

深刻理解Redis集群(下):Redis 哨兵(Sentinel)模式

背景 现在对3个节点的sentinel进行配置。sentinel的配置文件在redis的安装目录中已经存在&#xff0c;只需要复制到指定的位置即可。 sentinel是独立进程&#xff0c;有对应的脚本来执行。 基于之前的redis 一主二从的架构&#xff0c;我们继续启动3个sentinel进程。 哨兵模式的…

MAC备忘录空白解决方案

打开icloud->备忘录 取消勾选同步此MAC后再次勾选&#xff0c;然后点击完成即可。

【SpringCloud】服务注册/服务发现-Eureka

服务注册/服务发现-Eureka 1. 背景1.1 问题描述1.2 解决思路1.3 什么是注册中⼼1.4 CAP理论1.5 常⻅的注册中⼼ 2. Eureka 介绍3. 搭建Eureka Server 1. 背景 1.1 问题描述 上个章节的例⼦中可以看到, 远程调⽤时, 我们的URL是写死的 String url "http://127.0.0.1:90…