Linux进程概念(四):进程优先级 环境变量

news2024/9/23 7:21:55

目录

进程优先级

学前补充

命令行参数 

环境变量

环境变量$PATH 

整体理解环境变量

environ指针

获取环境变量的三种方式

内建指令 

证明内建指令的存在


进程优先级

基本概念:指定进程获取某种资源的先后顺序

linux的优先级是进程控制块task_struct中的一个内部字段“int piro”,prio的值越小优先级越高 

产生原因:进程访问的资源(CPU等)是有限的,而会有多个进程试图访问同一资源

查看进程优先级指令:ps -al 

  • PRI:进程的优先级,值越小优先级越高
  • NI:也叫nice值,是一个整型的进程优先级的修正数据,nice的取值范围是[-20,19](40个)
  • 新的优先级 = 优先级 + nice

调整进程优先级方式之一(nice和renice指令也可以做到,记得自行查找):

  • top指令:进入Linux的任务资源管理器
  • r:开始修改
  • 输入要调整进程的PID
  • 输入新的nice

注意事项:Linux中,每次调整优先级都是基于默认PRI的,且不建议频繁调整优先级

学前补充

  • 进程的竞争性:CPU数量有限,进程数量多,进程在使用CPU资源时会产生竞争
  • 进程的独立性:多进程运行时各进程独占一份资源,进程间不会互相影响
  • 并行:多个进程在多CPU上同时执行
  • 并发:多个进程在单CPU上以极快的速度轮转执行,在一段时间内多个进程均可被执行

命令行参数 

基本概念:main函数的参数可带可不带( main(int argc, char *argv[]) )

  • argc是argv数组中指针的个数
  • argv是一个变长指针数组,每个指针都指向一个字符串,数组必须以NULL结尾

命令行参数的产生原因:为了交给程序不同的参数,从而定制不同的程序功能

        命令行字符串默认是传递给父进程bash(命令行解释器)的,bash对命令行字符串做处理后(malloc开辟指针数组,数组中的字符指针分别指向分割好的多个字符串),由于父进程的数据默认能被子进程看到并访问,故在命令行上启动的子进程可以看到父进程构建的指针数组,在子进程中对数组中的内容进行判断就可以产生不同的功能(程序   -a,父进程处理后argv数组中的argv[0] = "程序名"、argv[1] = "-a",在子进程中做出判断,if(strcmp(argv[1],"-a")) 则执行某功能;程序 -a -l,则子进程中if(strcmp(argv[1],"-a") && strcmp(argv[2],"-l") )则执行某功能    )

C语言的命令行参数:http://t.csdnimg.cn/IhtqG 

环境变量

基本概念: 登陆时与登录、用户、路径、程序等相关的全局变量叫做环境变量(默认配置信息)

  • $PATH:可执行文件所在路径
  • $HOME:当前用户家目录所在路径
  • $SHELL:当前正在运行的SHELL的完整路径
  • $HISTSIZE:历史指令记录条数,默认为1000条
  • $PWD:当前工作目录

显示所有环境变量:env

打印环境变量:echo $环境变量

注意事项:

1、Linux中,与环境变量相关的配置文件通常位于用户主目录下的 .bashrc 或.bash_profile中

2、可通过export 自定义环境变量名 = 自定义环境变量值添加自定义环境变量

3、可通过unset 自定义环境变量名取消环境变量

4、在env中找不到但是可以echo $打印的变量称为本地变量

5、本地变量不被视为环境变量(未被添加到环境变量表中)只在本bash内有效,无法被子进程继承下去,除非将其导入环境变量表,才能被子进程获取 

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

环境变量$PATH 

指令的本质是程序

1、未指明路径的ls指令和指明路径的/user/bin/ls指令的意义相同且都能被执行:

2、自定义的可执行程序必须指明路径后才能执行:

原因:环境变量PATH用于告诉命令行解释器,应该去哪些路径下寻找可执行程序

PATH中存放的是bash在寻找命令时的默认搜索路径,各个子路径由:进行划分:

  • 执行命令时bash会逐个查找默认搜索路径中的子路径,当前子路径中未找到就跳转至下一路径下寻找,如果都没找到就报“command not found”,找到了就会加载并运行该指令,ls指令在默认路径的子路径usr/bin中所以可以不加路径直接执行,但a.out没在执行时就需要指明路径 

3、可通过suod cp a.out /usr/bin/指令将a.out指令加载到默认路径的子路径/usr/bin中,使用sudo rm /usr/bin/a.out将指令从子路径/usr/bin中删除

  • 由于环境变量是内存级的,故每次登录Linux系统时都会将PATH中的内容恢复至默认状态
  • 这是因为最开始的环境变量(包括PATH)不是在内存中的,而是在系统的配置文件中,每次登录Linux时bash会从配置文件中读取环境变量(包括PATH)后续在程序中队PATH中的默认路径的修改不会影响配置文件

4、 可通过PATH=$PATH:/当前程序的所在路径指令,将当前程序所在路径放入默认搜索路径中,就可以执行当前程序所在路径中的所有程序

结论:登陆Linux系统时,与环境变量相关的配置文件已经加载到bash进程中

整体理解环境变量

environ指针

基本概念:Linux中提供了environ指针,通过该指针可以获取当前进程的环境变量

结论1:环境变量默认可以被子进程拿到

原因: bash进程启动时,默认会形成两张“表”:argv[]命令行参数表(基于用户输入的命令行字符串)、env[]环境变量表(基于系统的配置文件),子进程可以看到并访问这两张“表”

结论:main函数可以传递的参数个数是0、2、3 

获取环境变量的三种方式

1、extern char** environ

2、通过main函数参数

3、getenv(“环境变量名”)

  • 只能拿到单个环境变量
  • 需要包含头文件<stdlib.h> 

注意事项: extern char** environ和main函数参数不同

内建指令 

基本概念:Linux中80%的命令(外部命令)是bash创建而子进程执行的,20%的命令是内建命令

注意事项:内建指令是由bash亲自执行的,不会创建子进程,故bash可以看到修改后的数据

  • bash的“创建”就是找到该命令的可执行程序文件,然后新建一个子进程去执行该可执行文件(向bash中输入ls,则会创建一个子进程并指令ls程序
  • 在bash中输入ls命令时,bash会创建一个新的子进程来执行该命令

证明内建指令的存在

~over~

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

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

相关文章

华为交换机重置密码

1.进入bootrom 加电后&#xff0c;18S左右&#xff0c;在启动菜单按 CtrlB 进入bootrom&#xff08;3s内&#xff09; 注意&#xff1a;本步骤属于高危操作&#xff0c;一定小心切勿删除系统或修改bootrom密码&#xff01; 输入bootrom密码&#xff0c;按6 看到提示成功后按…

Django模型的继承

Django模型的继承 Django模型的继承&#xff0c;包括模型的抽象基类、Meta继承、related_name和related_query_name属性、多表继承、Meta和多表继承、继承与反向关系、代理模型、代理模型继承和未托管模型&#xff0c;以及多重继承等内容。本文讲解一下抽象基类继承&#xff0…

详解Qt中实现树状结构图

在Qt中&#xff0c;实现树状结构图通常采用QTreeWidget或QTreeView组件。这两个组件都允许我们创建具有层次结构的列表&#xff0c;但它们之间存在一些差异。QTreeWidget提供了更简单的API&#xff0c;适用于轻量级、快速开发的需求&#xff1b;而QTreeView则更为灵活和可定制&…

.NET WebAPI服务端启用跨源请求 (CORS)

跨源请求 (CORS)问题 在API服务端启用跨源请求 (CORS) 调用 UseCors 扩展方法并指定 PolicyCorsName CORS 策略。 UseCors 添加 CORS 中间件。 对 UseCors 的调用必须放在 UseRouting 之后&#xff0c;但在 UseAuthorization 之前。 Program.cs添加如下代码&#xff08;注意中间…

货拉拉0-1数据指标体系构建与应用

目录 一、背景 二、指标体系搭建 2.1 指标设计 2.2 指标体系搭建 2.3 指标维度拆解 三、指标标准化建设 四、指标元数据管理 五、指标应用&未来规划 原文大佬介绍的这篇指标体系构建有借鉴意义&#xff0c;现摘抄下来用作沉淀学习。如有侵权请告知~ 一、背景 指标…

二叉搜索树及相关操作(图文详解)

1.概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值 它的左右子树也分…

【面试经典 150 | 数组】整数转罗马数字

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容进行回顾…

c# 构造函数 静态构造函数 内联字段(即静态字段和实例字段) 父类构造函数 父类静态构造函数 父类内联字段 执行顺序

顺序如下&#xff1a; 1.子类的内联字段 2.子类的静态构造函数 3.父类的内联字段 4.父类的静态构造函数 5.父类的构造函数 6.子类的构造函数 7.子类的方法 public class A{public static string a1"A0";static A(){Console.WriteLine("父类内联字段&#xff1a;…

品深茶的创始人是谁?

据说&#xff0c;品深茶的创始人之前是一个程序员&#xff0c;他在软件行业工作十多年&#xff0c;由于常年熬夜加班再加上抽烟喝酒等不良习惯&#xff0c;导致在一次体检中被查出患上了肾癌&#xff0c;对他来说&#xff0c;期待的财务自由还没实现&#xff0c;身体就已经完蛋…

C++进阶复习

1 指针 作用&#xff1a;通过指针间接访问内存 1.内存编号是从0开始记录的&#xff0c;一般用十六进制数字表示。 2.可以利用指针变量保存地址。 1.1 指针变量的定义和使用 语法&#xff1a;数据类型 *变量名。如int *a; #include<iostream> using namespace std;int mai…

mininet+odl安装

安装环境 ubuntu-18.04.2-desktop-amd64 Java version: 1.8.0_362 Apache Maven 3.6.0 opendaylight: distribution-karaf-0.6.0-Carbon(csdn中应该是已有资源&#xff0c;不让上传) opendaylight的官网下载链接一直打开失败&#xff0c;我使用的是别人的Carbon版本。 在安…

汇编语言作业(三)

目录 一、实验目的 二、实验内容 三、实验步骤以及结果 1、阅读第4页ppt 第一个汇编程序 ex1.asm 并编写编译执行成功后&#xff0c;要求改写&#xff0c;使其输出字符ABC&#xff0c;如下图所示。 &#xff08;1&#xff09;编译产生目标文件 &#xff08;2&#xff09;…

Python-VBA函数之旅-hex函数

目录 一、hex函数常见的应用场景&#xff1a; 二、hex函数使用注意事项&#xff1a; 1、hex函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、hex函数常见的应用场景&#xff1a;…

【STM32+HAL+Proteus】系列学习教程---串口USART(DMA 方式)定长,不定长收发。

实现目标 1、利用UART实现上位机PC与下位机开发板之间的数据通信 2、学会STM32CubeMX软件关于UART的DMA模式配置 3、具体目标&#xff1a;1、实现串口定长收发数据通信&#xff1b;2、串口不定长收发数据通信。 一、DMA简介 1、什么是DMA? DMA&#xff08;Direct Memory …

基于YOLOV5 的ROS2功能包——快速实现目标识别功能

项目链接&#xff1a; yolov5_ros2 运行结果如下&#xff1a;实时显示识别结果 一、下载功能包并运行 1. 安装依赖 首先&#xff0c;确保您已经更新了系统并且安装了必要的依赖。以下是一些安装步骤&#xff0c;其中$ROS_DISTRO 是您的ROS2发行版&#xff08;例如&#xff1…

交通工程绪论

一、交通工程 交通工程学定义交通工程学研究的内容交通工程学的产生与发展交通工程学在道路运输管理中的作用 1. 交通工程学定义 早在20世纪30年代&#xff0c;美国交通工程师协会(American Institute of Traffic Engineers)给交通工程学(Traffic Engineering)下了一个定义&a…

去雾笔记-Pixel Shuffle,逆Pixel Shuffle,棋盘效应,转置卷积

文章目录 1.Pixel Shuffle2.Inverse Pixel Shuffle3.棋盘效应4.转置卷积5.宽激活块6.PSPNet7.反射填充层&#xff08;Reflective Padding Layer&#xff09;8.tanh层 1.Pixel Shuffle Pixel Shuffle是一种用于图像超分辨率的技术&#xff0c;它通过重新排列图像的像素来增加图…

Django模型的属性与方法

本节介绍Django模型的属性和方法&#xff0c;以及如何重写之前定义的模型方法等内容。 3.5.1 模型属性 Django模型中最重要的属性就是Manager&#xff0c;它是Django模型和数据库查询操作之间的接口&#xff0c;并且被用作从数据库当中获取实例的途径。如果Django模型中没有…

python基础知识一(注释、变量以及类型、类型转换)

目录 注释&#xff1a; 注释分为两种&#xff1a; 注释的作用&#xff1a; 注释的使用原则&#xff1a; 编写一段代码&#xff0c;对比一下有无注释的区别&#xff0c;以冒泡排序为例 1. 无注释版&#xff1a; 感官上是不是有点不清晰&#xff1f; 2. 有注释版&#xff1…

绝地求生:【数据流】工资杯决赛,天霸161分夺得冠军,Aixleft战神37杀

数据制作&#xff0c;整理不易&#xff0c;求支持&#xff0c;点赞&#xff0c;收藏&#xff0c;充电哟&#xff01; 如有错误&#xff0c;请在评论区指出&#xff0c;感谢各位~ 积分&#xff1a; 战队数据&#xff1a; 排名前3&#xff1a;Tian(161) / NH(145) / PeRo(137) …