Linux进程(3)(进程优先级 - 优先级 - 命令行参数 - 环境变量)

news2024/11/14 18:50:19

目录

1.进程优先级

1)什么是优先级

2)为什么要有优先级

3)Linux的优先级特点 && 查看方式

2.命令行参数和环境变量

3.环境变量

1)直接现象

2)见见更多的环境变量

3)整体理解环境变量和系统,和我们的程序结合一下


1.进程优先级

1)什么是优先级

优先级是指定进程获取某种资源的先后顺序

task_struct 进程控制块->struct->内部字段 ->int prio = ??

(task_struct作为进程控制块,内部包含了多个不同的结构体和字段,其中某个特定的struct中包含prio字段,用于存储默认优先级数字)

prio

default_prio = 80;

nice

在Linux中,优先级数字越小,优先级越高

关于优先级与权限之间的联系:

1.权限表示这个资源能不能获取

2.而优先级则是这个资源已经能获取了,只不过是获取资源的顺序

2)为什么要有优先级

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

操作系统关于调度和优先级的原则:分时操作系统(时间片),基本的公平,如果进程因为长时间不被调度,就造成了饥饿问题。

3)Linux的优先级特点 && 查看方式

PRI:进程优先级

NI:进程优先级的修正数据,nice值,新的优先级 = 优先级 + nice,达到对于进程优先级动态修改的过程

这里我直接把nice干到了100,但是可以看到,NI只有19,这是因为:

nice的值有范围的 --> [-20,19]

这里我又进行了一次nice = -10(变为root才能二次更改)

但是我们发现PRI并没有从99开始变,而是从80,说明每次调整优先级,都是从80开始的。

一些其他概念:

2.命令行参数和环境变量

命令行参数:

int main(int argc, char *argv[]){}

main函数的参数可带可不带

通过传参和for循环遍历,可以将argv里面的char* 打印出来

而这个char** argv默认是父进程bash的!!

那么,为什么要有命令行参数呢:

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

g_val这个数据在fork()创建子进程后,子进程也能访问并打印出来

说明父进程的数据,默认能被子进程看到并访问(注意:这里并没有说写入,所以与进程的独立性并不冲突)

我们发现,当我们执行exe可执行程序时,初始进程的ppid(也就是初始进程父进程的pid)始终为一个id,那这个id是谁呢?

命令行中启动的程序,都会变成进程,其实都是bash的子进程

3.环境变量

1)直接现象

Linux中,存在一些全局的设置,表明告诉命令行解释器,应该去那些路径下去寻找可执行程序

PATH:环境变量

$PATH:打印环境变量的内容

系统中很多的配置,在我们登录Linux系统的时候,已经被加载到了bash进程中(内存)

默认我们查到的环境变量是内存级的

如果我想执行我的命令时,和系统指令一样的话

通过       PATH=$PATH:可执行程序所在路径

但是一旦重启XShell或其他终端软件时,PATH就会恢复默认,这时因为最开始的环境变量不是在内存中,而是在系统的对应的配置文件中

配置文件:

默认的环境变量都是存在于配置文件中的,在配置文件中修改,才算是真正修改了

2)见见更多的环境变量

PATH/HOME/SHELL/HISTSIZE/PWD

指令:

env ---  查看所有环境变量

echo $xxx --- 查看某个环境变量

export name=value --- 创建一个名为name值为value的环境变量

unset name  --- 取消环境变量

3)整体理解环境变量和系统,和我们的程序结合一下

bash进程启动的时候,默认会给我子进程形成两张表:argv[]命令行参数表,env[]环境变量表。bash通过各种方式交给子进程!!!

1.argv命令行参数表来自用户输入的命令行   

2.而env[]环境变量表则是来自OS的配置文件夹

这里和命令行参数类似,可以用for循环打印出环境变量(传参数或者声明都可(传参--》int main(int argc, char *argv[], char* env[]))

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

获取环境变量的方式:

1.extern char **environ

2.通过main函数参数

3.getenv("path")

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

一般来说父进程的数据,子进程是能看到的,但是如果子进程导的一些变量做了修改,父进程是看不到的(因为进程具有独立性)

那么这种情况下做出的定义,它不应该创建子进程吗??如果创建了子进程那么导出来的环境变量就不应该被bash看到,但是确实实实在在的导给了bash啊,这是为什么呢??

(80%的命令都是bash创建子进程执行的)

因为export、echo等等有些命令为内建命令,由bash亲自执行

怎么理解呢?--》

比如C语言中有很多函数(bash也是C语言写的),就相当于bash内部有函数调用,而一些函数调用的名字就叫做

void export()

void echo)() 等等函数

bash内部如果识别到你的命令正好是export或者echo时,就不创建子进程了,就自己把这个函数调用就执行了

那怎么证明是内建命令呢?--》

当我把环境变量置空时,expor和echo还有其他内建命令能跑,而其他的命令都跑不了了

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

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

相关文章

【UEFI基础】BIOS模块执行的优先级

综述 BIOS下主要通过两种方式来确定一般模块的优先级,一种是fdf文件中指定的优先级,另一种是inf文件中指定的优先级。需要注意这里使用了“一般模块”的说法,因为有些模块(尤其是PEI_CORE,DXE_CORE类型的模块&#xf…

Codeforces Round 972(Div.2)A+B

Codeforces Round 972(Div.2)ABC 昨天晚上做了Codeforces Round 972(Div.2)的A、B两道题,今天补一下思路。 题目来源:https://codeforces.com/contest/2005 A. Simple Palindrome 题目描述 输入输出样例…

linux---压缩打包

linux打包和压缩文件和目录: 归档(打包)命令:tar 归档就是将多个文件或者目录打包成为一个文件,存放再磁盘中,方便文件或者目录丢失时,可以恢复。 归档文件名使用相对路径 (注意区分归档文件和被归档文…

Go 注册Nacos

根据需要GO 项目也接入Nacos 系统版本:Linux 5.4.18-87.76-generic KYLINOS SMP Thu Aug 31 09:05:44 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux Go:1.19.4 1.查看Nacos-sdk-go 官方适配自己的工程 github.com/nacos-group/nacos-sdk-go NacosManager.go p…

【自动化测试】UI自动化的分类、如何选择合适的自动化测试工具以及其中appium的设计理念、引擎和引擎如何工作

引言 UI自动化测试主要针对软件的用户界面进行测试,以确保用户界面元素的交互和功能符合预期 文章目录 引言一、UI自动化的分类1.1 基于代码的自动化测试1.2 基于录制/回放的自动化测试1.3 基于框架的自动化测试1.4 按测试对象分类1.5 按测试层次分类1.6 按测试执行…

[产品管理-21]:NPDP新产品开发 - 19 - 产品设计与开发工具 - 详细设计与规格定义

目录 前言: 一、详细设计与规格定义概述 1、产品详细设计 2、规格定义 3、详细设计与规格定义的关系 4、实际应用中的注意事项 二、详细设计与规格定义主要工具 2.1 质量功能展开QFD - 需求跟踪矩阵 1、QFD的基本原理 2、QFD的实施步骤 3、QFD的优势与应…

智能赋能,Vatee万腾平台助力企业升级新高度

在当今这个日新月异的数字时代,智能技术的飞速发展正以前所未有的力量重塑着各行各业的面貌。作为这一变革浪潮中的佼佼者,Vatee万腾平台凭借其卓越的智能赋能能力,正引领众多企业迈向转型升级的新高度,开启了智能化发展的新篇章。…

【性能优化】分块

性能优化-tiling过程 这张图展示了在硬件和软件两个层面上执行矩阵乘法 C + = A B C += AB C+

560 和为k的子数组

解题思路: \qquad 一开始看到连续非空序列,会想到是不是可以用双指针表示一个区间,然后通过一次遍历找出所有可能的区间,但看到元素的取值区间就知道行不通,这个方法仅适用于数组元素大于等于0的情况。若数字是负数&a…

【Java面试】第十天

🌟个人主页:时间会证明一切. 目录 Spring 中的 Bean 是线程安全的吗?有状态的Bean如何解决线程安全问题 SpringBoot和Spring的区别是什么?SpringBoot的启动流程是怎么样的?new SpringApplication()SpringApplication.r…

【Android 13源码分析】WindowContainer窗口层级-2-构建流程

在安卓源码的设计中,将将屏幕分为了37层,不同的窗口将在不同的层级中显示。 对这一块的概念以及相关源码做了详细分析,整理出以下几篇。 【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树 【Android 13源码分析】WindowCon…

ArrayList 源码解析

ArrayList是Java集合框架中的一个动态数组实现,提供了可变大小的数组功能。它继承自AbstractList并实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同…

模板替换引擎(支持富文本动态表格)

模板替换引擎(支持富文本动态表格) 前言功能介绍example: 使用方法函数扩展系统函数自定义函数 前言 分享一下自己开源的工具——模板替换引擎 https://github.com/RwTo/template-engine 可以拿来学习设计模式或使用 感兴趣的话&#xff…

网络编程基础概述

文章目录 协议网络协议栈(osi)局域网IPIP和Mac地址端口号TCP和UDP网络字节序 协议 (网络协议的)意义:为了让计算机传输之间将信息正确传输给目标机器 不同系统之间能接入网络是因为定制了一套通用的协议以便支持不同系统间的网络通信 1.网络通信的问题: 将数据可靠的从A传给B a…

AtCoder ABC369 A-D题解

比赛链接:ABC369 省流&#xff1a;A<B<D<C&#xff08;题解是按照该顺序写的&#xff09; Problem A: #include <bist/stdc.h> using namespace std; int main(){int A,B;cin>>A>>B;if(AB)cout<<1<<endl;else if(abs(A-B)%20)cout&l…

织物缺陷检测系统源码分享

织物缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

1405 问题 E: 世界杯

废话 这个题&#xff0c;我估计 22 22 22 年的时候写过一次&#xff0c;当时应该是搞明白了&#xff0c;现在重新写还是不会写&#xff0c;有点无奈 题目 问题 E: 世界杯&#xff1a;现在的 OJ 把题目加到一个活动里面去之后&#xff0c;感觉之后这个链接就访问不了了。题目…

伙房食堂电气安全新挑战:油烟潮湿环境下,如何筑起电气火灾“防火墙”?

近几年&#xff0c;随着我国经济的飞速发展&#xff0c;食堂餐饮也经历了一场变革&#xff0c;越来越多的电器走进了伙房食堂中&#xff0c;实现了电气化&#xff0c;为人们提供了高效便利的饮食服务&#xff0c;但同时也增加了火灾负荷。目前我国非常严重的电气火灾危害&#…

【STM32】DAC数字模拟转换

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 前言 DAC简介 DAC配置 DAC时钟使能 GPIO初始化 DAC配置 DAC使能 读写DAC值 驱动代码 MyDAC.h MyDAC.c main.c 前言 大容量的STM32F101xx和STM32F103xx产品才有DAC外设 大容量…

几种mfc140u.dll常见错误情况,以及mfc140u.dll文件修复的方法

如果你遇到与mfc140u.dll 文件相关的错误&#xff0c;这通常指的是该mfc140u.dll文件可能丢失、损坏或与您的应用程序不兼容。详细分析关于mfc140u.dll文件错误会对系统有什么影响&#xff0c;mfc140u.dll文件处于什么样的位置&#xff1f;以下是几种常见的错误情况及其修复方法…