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

目录

进程优先级

学前补充

命令行参数 

环境变量

环境变量$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://xiahunao.cn/news/2978746.html

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

相关文章

数据库管理-第173期 OceanBase一体化Plus多模融合(20240422)

数据库管理173期 2024-04-22 数据库管理-第173期 OceanBase一体化Plus多模融合&#xff08;20240422&#xff09;1 架构简化2 不止融合2.1 行列混存2.2 多维使用2.3 多模JOIN 3 展望 数据库管理-第173期 OceanBase一体化Plus多模融合&#xff08;20240422&#xff09; 作者&…

[部分WP]DASCTF X GFCTF 2024 WEB

Web EasySignin 考点&#xff1a; 越权SSRF gopher协议去攻击mysql 通过注册任意用户修改admin密码 登入然后点击康好看图片 抓包 ?url 典型SSRF漏洞 尝试file读取/etc/passwd无果 尝试gopher协议去攻击mysql 利用工具gopherus 盲猜数据库用户为root 然后再次次url编码得到…

Day13.一刷数据结构算法(C语言版) 102二叉树的层序遍历;226翻转二叉树;101对称二叉树

一.102二叉树的层序遍历 二叉树的层序遍历力扣题目 1.思路分析 这道题我没有什么好的思路&#xff0c;而且力扣给的函数形式看得有点懵&#xff0c;所以我找到一个相对好理解的题解&#xff0c;具体可以参考下方链接。 力扣题解 说明&#xff1a; 返回值&#xff1a;可…

全国832个贫困县名单及精准扶贫脱贫(摘帽名单)数据(2016-2020.11)

01、数据简介 自党的十八大以来&#xff0c;我国脱贫攻坚战取得了举世瞩目的伟大胜利。经过全党全国各族人民的共同努力&#xff0c;现行标准下9899万农村贫困人口全部脱贫&#xff0c;832个贫困县全部摘帽&#xff0c;12.8万个贫困村全部出列&#xff0c;区域性整体贫困得到解…

BFS解决八数码问题-java

本文主要通过BFS广度优先搜索来解决八数码问题。 文章目录 前言 一、八数码 二、算法思路 1.思路模拟 2.实现思路 三、代码 1.代码如下&#xff1a; 2.读入数据 3.代码运行结果 总结 前言 本文主要通过BFS广度优先搜索来解决八数码问题。 提示&#xff1a;以下是本篇文章正文内…

7.2K star!一个完全免费,可以本地部署的 AI 搜索聚合器。新手可尝试

原文链接&#xff1a;7.2K star&#xff01;一个完全免费&#xff0c;可以本地部署的 AI 搜索聚合器。新手可尝试 ChatGPT 刚上线的时候我用的很少&#xff0c;还是习惯用 Google。主要还是因为不信任&#xff0c;怕它对我胡说八道。 慢慢的&#xff0c;也没有一个明确的时间…

工业4.0!智能工厂的智能物流系统应用

agv 智能物流系统通常指连接生产设备之间、车间之间以及车间与仓库之间的物流搬运系统。 为实现智能物流系统搭建&#xff0c;应该在尊重原有印刷生产工艺与合理生产布局基础上&#xff0c;通过应用新的生产智能化装备来实现协调车间的整体调度。 agv智能工厂 在现代化的物料搬…

java后端项目:视积分抽奖平台

一、项目背景: 本次抽奖系统实现是在视频中内置一个线上活动抽奖系统,奖品是在一个时间段区间内均匀发布,用户可以在这个时间段内参与抽奖。 二、项目架构 活动抽奖平台采用微服务架构来完成,在功能上实现拆分为用户、网关、以及抽奖微服务,其中用户、网关是后台项目通…

智能家居—ESP32开发环境搭建

相关文章 毕业设计——基于ESP32的智能家居系统(语音识别、APP控制) 智能家居—ESP32开发环境搭建 一、下载安装二、验证三、资料获取 一、下载安装 下载安装 vscode 安装插件 创建工程 二、验证 写一个简单的函数来验证一下功能 void setup() {// put your setup c…

常见UI组件(二)

一、文本输入 1.1 概述 TextInput为文本输入组件&#xff0c;用于接收用户输入的文本内容 1.2 参数 Entry Component struct Index {build() {Column({space : 50}) {TextInput({placeholder:请输入用户名}).width(70%)TextInput({text:当前内容}).width(70%)}.width(100%).…

光学雨量计:高精度测量降水量的理想解决方案

光学雨量计&#xff1a;高精度测量降水量的理想解决方案 河北稳控科技光学雨量计是一种高精度测量降水量的理想解决方案。它利用光学原理&#xff0c;通过光束的衰减来测量降雨强度和累积降水量。相比传统的雨量计&#xff0c;光学雨量计具有更高的精度和可靠性&#xff0c;成…

科研基础与工具(论文写作)

免责申明&#xff1a; 本文内容只是学习笔记&#xff0c;不代表个人观点&#xff0c;希望各位看官自行甄别 参考文献 科研基础与工具&#xff08;YouTube&#xff09; 学术写作句型 Academic Phrase bank 曼彻斯特大学维护的一个网站 写论文的时候&#xff0c;不不知道怎么…

IDEA开启自动导包,自动删包

找到file----------->Settings选项 找到Editor-------->General------------>Auto Import选项 勾选两个选项&#xff0c;在点击Apply,在点击ok 最后就ok了

入门指南:从零开始学习ReactJS

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

2024三掌柜赠书活动第二十四期:containerd原理剖析与实战

目录 前言 Containerd的架构 Containerd的工作流程 Containerd的实战演示 关于《containerd原理剖析与实战》 编辑推荐 内容简介 作者简介 图书目录 书中前言/序言 《containerd原理剖析与实战》全书速览 结束语 前言 作为开发者&#xff0c;对于编程语言并不陌生&…

Win10下VS2015无法添加任何文件,提示未能加载文件或程序集“Microsoft.VisualStudio.JSLS...

错误&#xff1a;未能加载文件或程序集“Microsoft.VisualStudio.JSLS, Version14.0.0.0, Cultureneutral, PublicKeyTokenb03f5f7f11d50a3a”或它的某一个依赖项。系统找不到指定的文件。 解决&#xff1a; 1. 管理员身份打开cmd 2. cd C:\Program Files (x86)\Microsoft Vis…

CommunityToolkit.Mvvm笔记---RelayCommand

RelayCommand 和 RelayCommand<T> 是 ICommand 实现&#xff0c;这些实现可向视图公开方法或委托。 这些类型充当在 viewmodel 和 UI 元素之间绑定命令的方法。 平台API&#xff1a;RelayCommand、RelayCommand<T>、IRelayCommand、IRelayCommand<T> 工作原理…

input的type=‘radio‘设置只读属性颜色为灰色,如何修改

目录 1.设置input和label的样式为不可点击。 2.设置input的readonly属性。 3.若想变回可修改&#xff0c;用js实现 4.如何自定义radio的颜色。 5.完整代码 input的单选框有时候需要实现只读&#xff0c;两个办法&#xff0c;一个disabled&#xff0c;一个是readonly. 但d…

【InternLM】Lagent智能体应用搭建

1. Lagent和AgentLego 1.1 Lagent Lagent 是一个开源的 LLM 智能体框架&#xff0c;允许使用者快速将一个大语言模型转换成智能体&#xff0c;并提供一些典型工具来激发大语言模型的潜能。Lagent 框架图如下&#xff1a; Lagent 包含三个主要模块&#xff1a;agents&#xf…