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

news2024/11/18 11:25:17

目录

  • 一,进程切换
  • 二,进程优先级
    • 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.coloradmin.cn/o/2184222.html

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

相关文章

电商店铺多开自动回复软件

在电商平台上开设多个店铺,即店铺多开,是一种扩展业务和增加销售额的策略。然而,店铺多开需要谨慎规划和执行,以避免违反平台规定和管理上的混乱。以下是如何实现店铺多开的详细步骤和注意事项。 1. 确定多开目标 在决定多开店铺…

[云] Getting Started with Kubernetes - Environment setup 环境配置

启动一个 EC2 实例, 请按照以下步骤操作: 登录 AWS 控制台: 打开浏览器,访问 AWS Management Console 并登录到您的账户。 选择 EC2 服务: 在 AWS 控制台的“服务”菜单中找到并点击“EC2”进入 EC2 Dashboard。 启…

Spark SQL分析层优化

导读:本期是《深入浅出Apache Spark》系列分享的第四期分享,第一期分享了Spark core的概念、原理和架构,第二期分享了Spark SQL的概念和原理,第三期则为Spark SQL解析层的原理和优化案例。本次分享内容主要是Spark SQL分析层的原理…

国内车牌号检测数据集 7800张 车牌识别 带标注 voc yolo

车牌号检测数据集 7800张 车牌识别 带标注 voc yolo 车牌号码检测数据集 名称 车牌号码检测数据集 (License Plate Detection Dataset) 规模 图像数量:7800张图像。类别:无分类,主要针对车牌区域的定位。标注个数:10,000多个标…

Windows 11 的 24H2 更新將帶來全新 Copilot+ AI PC 功能

10 月起率先向 Insider 推出。 微軟今日宣布 Windows 11 的 24H2 更新將從 10 月起陸續開放給不同用戶,其中將包括多項全新 Copilot AI PC 功能。首先是回爐重造的 Recall 回顧,官方在聽取社群意見後對安全性做了進一步加強。現在用戶可以自己選擇是否保…

从小IPD到大IPD

IPD体系实施或变革是一个长期的系统工程,需要坚持“总体规划、分步实施”的原则,业界经常有从“小IPD”到“大IPD”的说法。 像华为当年就是从“产品开发流程”开始推行,就是小范围的“小IPD”,后面逐步扩大为“大IPD”&#xff0…

Ubuntu22.04之mpv播放器高频快捷键(二百七十)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

两个向量所在平面的法线,外积,叉积,行列式

偶尔在一个数学题里面看到求两向量所在平面的法线,常规方法可以通过法线与两向量垂直这一特点,列两个方程求解;另外一种方法可以通过求解两个向量的叉积,用矩阵行列式 (determinant) 的方式,之前还没见过,在…

正则表达式调试工具实战

正则表达式调试工具实战 1、新建工程QWidget工程工程名RegexTool 如果QT不会配置,请参考我的博客,QT配置 Widget.cpp 默认内容如下 2、主界面设计 三行两列,每行采用HBoxLayout作为行布局控件,内部一个Lable控件和一个TextEdit控件,采用VBoxLayout 控件包裹三个HBoxLa…

JWT | JWT 漏洞介绍

关注这个漏洞的其他相关笔记:JWT 漏洞 - 学习手册-CSDN博客 0x01:JWT 漏洞介绍 JWT(Json Web Token)是用于在网络应用环境间传递声明的一种基于 JSON 的开放标准。它通过使用 JSON 对象进行安全的信息传输,可以用于身…

ChatGPT实时语音将于本周向免费用户推出:OpenAI DevDay 2024详细解读

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…

激活函数ReLU,Sigmoid,tanh,softmax性质讲解及使用matplotlib绘制

Sigmoid及tanh sigmoid及tanh的函数图像较为相似,它们的公式如下 Sigmoid公式 tanh公式 Sigmoid及tanh性质解析 Sigmoid和tanh作为激活函数都可以有效完成非线性映射的功效,其中Sigmoid经常作为2分类的神经网络的输出层的激活函数,由于其非线性映射会将输出值转换到0-1的区间…

心觉:潜意识开发为何失败?99%的人卡在理性与感性学习的误区

Hi,我是心觉,与你一起玩转潜意识、脑波音乐和吸引力法则,轻松掌控自己的人生! 挑战每日一省写作187/1000天 小时候看武侠剧的时候,经常看到剧中有武林高手把绝世武功传给某个涉世未深的铁憨憨主角,比如《天…

四、Drf认证组件

四、Drf认证组件 4.1 快速使用 from django.shortcuts import render,HttpResponse from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.authentication import BaseAuthentication from rest_framework.exception…

win11 升级报 0x80073713 错误

安装错误 - 0x80073713 通常是由于系统文件损坏或 Windows Update 组件异常引起的。‌ 这个问题可能阻止您的系统正常接收和安装更新,影响系统的稳定性和安全性。 可以尝试如下如下方法: 首先,您可以尝试使用命令提示符运行系统文件检查器…

资源《Arduino 扩展板2-矩阵按钮 》说明。

资源链接: Arduino 扩展板2-矩阵按钮 1.文件明细 2.文件内容说明 包含:AD工程、原理图、PCB。 3.内容展示 4.简述 该文件为PCB工程,采用AD做的。 该文件打板后配合Arduino使用,属于Arduino的扩展板。 该文件主要有16个按钮…

wgan的实现的伪代码,和原理,dcgan,模型坍塌 em距离 js kl散

原文地址 https://blog.csdn.net/Keep_Trying_Go/article/details/130471766 伪代码详细看这个, 特别注意点:gan(xnosize) 生成器 是 输入噪声 ,而不是全部噪声生成的 特别注意点:gan(xnosize) 生成器 是 输入噪声 &#…

vue3使用Teleport 控制台报警告:Invalid Teleport target on mount: null (object)

Failed to locate Teleport target with selector “.demon”. Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree main.…

基于SSM+小程序的选课管理系统2(源码+sql脚本+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 ​ 教师的账号和密码可以注册,管理员的账号和密码可由系统开发者在数据库中设置,学生的账号和密码可以由注册获得。 1、管理员的主要功能为学生资料、教师资料的添…

如何升级OCAT

如何升级OCAT 一. 从官网下载OCAT 官网下载地址链接:https://github.com/ic005k/OCAuxiliaryTools/releases 目前下载下来版本为0.8.8,但RapidEFI显示最新版本已经为1.0.1。 为了防止OC版本过低导致进不了系统,需要对OCAT进行升级。![在这里…