当前位置: 首页 > news >正文

【Linux】-- 进程优先级和环境变量

目录

进程的优先级

基本概念

如何查看优先级

PRI与NI

NI值的设置范围

NI值如何修改

修改方式一 : 通过top指令修改优先级

修改方式二 : 通过renice指令修改优先级

进程的四个重要概念

环境变量

基本概念

常见的环境变量

查看环境变量

三种环境变量的作用(不建议修改)

PATH

方式一: 将我们的可执行文件放到PATH路径中

方式二: 将我们当前的路径加入到PATH路径当中

HOME

SHELL

环境变量相关指令

 环境变量的组织方式

 main函数的参数

通过系统函数来获取环境变量


进程的优先级

基本概念

  1. 什么是进程优先级?

cpu资源分配的先后顺序 就是指进程的优先权(priority)

  1. 优先级存在的原因?

优先级存在的原因 本质上是因为资源的不足 在系统中表现为有多个进程却只有一个cpu

如何查看优先级

我们可以使用ps -l指令来查看进程

ps -l

  • UID 执行者的身份ID
  • PID 代表进程的代号
  • PPID 代表父进程的代号
  • PRI 代表进程的优先级
  • NI 代表这个进程的nice值 用来修正进程的优先级

PRI与NI

  • PRI 是进程的优先级 就是(轻量级)进程被CPU执行的先后顺序 此值越小进程的优先级别越高
  • NI 表示进程可被执行的优先级的修正数值
  • PRI和NI值的关系符合下面的公式 PRI(new) = PRI (old)+ NI
  • 当NI值为负值的时候 那么该程序将会优先级值将变小 优先级会变高
  • 调整进程优先级 就是调整进程的nice值
  • nice的取值范围是 -20~19 一共四十个值

在Linux系统中 PRI(old)值默认为80 所以说Linux中 优先级为 PRI(new) = 80 + NI

NI值的设置范围

NI 的设置范围是固定的 必须是 -20~19 如果超出这个值 则设定的nice值会变为最接近这个区间的值

如果设定NI值为 -100 则它的值会被设置为 -20

如果设定NI值为100 则它的值会被设置为19

为什么NI值的范围被设置成这样子

因为操作系统要尽量保证每个进程的公平运行 如果我们可以随意将进程的优先级设置的很低那么操作系统就会倾向于执行这个进程 从而导致其他进程不能被很好的被cpu执行 所以说PRI值最好是在一个范围中

NI值如何修改

修改方式一 : 通过top指令修改优先级

top命令就相当于任务管理器

我们调用top命令之后会出来这样子的界面

按住 r 键 就可以输入需要调整NI值的进程PID

 

输入PID之后回车 再输入NI值

 

输入修改的NI值为15之后回车 按住q键 退出top

 

 这是因为6646是5850的子进程 会继承父进程的代码和数据

修改方式二 : 通过renice指令修改优先级

指令为renice + NI值 + 进程号

 普通用户如果想要renice 需要使用sudo指令 临时提升权限

进程的四个重要概念

  • 竞争性: 系统进程数目众多 而CPU资源只有少量 甚至1个 所以进程之间是具有竞争属性的 为了高效完成任务 更合理竞争相关资源 便具有了优先级
  • 独立性: 多进程运行 需要独享各种资源 多进程运行期间互不干扰
  • 并行: 多个进程在多个CPU下分别 同时运行 
  • 并发: 多个进程在一个CPU下采用进程切换的方式 在一段时间之内 让多个进程都得以推进 称之为并发

环境变量

基本概念

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

由于它是在操作系统中的 所以一般是全局变量

常见的环境变量

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

查看环境变量

echo $PATH

三种环境变量的作用(不建议修改)

PATH

为什么我们系统的可执行文件我们就可以直接执行 而我们自己编译的可执行文件却不可以

这个就是因为环境变量PATH的存在

自己的可执行文件之所以要指定位置的就是因为它们不在PATH路径中

方式一: 将我们的可执行文件放到PATH路径中

方式二: 将我们当前的路径加入到PATH路径当中

export PATH=$PATH:路径

HOME

SHELL

Linux操作系统当中所敲的各种命令 实际上需要由命令行解释器进行解释 而在Linux当中有许多种命令行解释器(例如bash、sh) 我们可以通过查看环境变量SHELL来知道自己当前所用的命令行解释器的种类

我们查看SHELL使用如下命令

环境变量相关指令

env : 显示所有环境变量

set : 显示本地定义的shell变量和环境变量

unset :清除环境变量

 

 

 环境变量的组织方式

在linux中 环境变量是通过一张表组织起来的 如果我们使用c语言的知识去理解的话其实就是环境变量表就是一个二级指针

它指向一个一级指针数组 这里面放置着各种环境变量 最后的环境变量是NULL

 main函数的参数

main函数是有参数的

它一共有三个参数 分别是 argc argv envp

其中argv是一个指针 它指向一个数组 里面储存的是char*类型的数据
argc是一个整数 它标识着argv中有效元素的个数

下面的代码来验证

 int main(int argc, char* argv[])
{if(argc != 2)                                                                                                                                                                                              {    printf("Usage: %s -[a|h]\n", argv[0]);    return 1;    }    if(strcmp(argv[1], "-h") == 0)    {    printf("hello world\n");    }    else if(strcmp(argv[1], "-a") == 0)    {    printf("hello all\n");    }    else    {    printf("hello\n");    } return 0;
}

 

 可以通过边里获取环境变量

int main(int argc, char* argv[], char* env[])
{for(int i = 0; env[i]; ++i)                                                                                                                                                                                {      printf("%d->%s\n", i, env[i]);      }  return 0;
}

 还可以直接用二级指针 environ来获取环境变量

注意 libc 中定义的全局变量environ指向环境变量表 environ没有包含在任何头文件中 所以在使用时要用extern进行声明

extern char** environ;                                                                                                                                                                                     
for(int i = 0; environ[i]; i++)      
{      printf("%d->%s\n", i, environ[i]);     
}

通过系统函数来获取环境变量

可以使用getenv系统函数来查看环境变量

printf("PATH: %s\n", getenv("PATH"));                                                                                                                                                                      
printf("HOME: %s\n", getenv("HOME"));  
printf("SHELL: %s\n", getenv("SHELL"));

相关文章:

【Linux】-- 进程优先级和环境变量

目录 进程的优先级 基本概念 如何查看优先级 PRI与NI NI值的设置范围 NI值如何修改 修改方式一 : 通过top指令修改优先级 修改方式二 : 通过renice指令修改优先级 进程的四个重要概念 环境变量 基本概念 常见的环境变量 查看环境变量 三种…...

iOS 紧急通知

一般通知 关于通知的各种配置和开发,可以参考推送通知教程:入门 – Kodeco,具有详细步骤。 紧急通知表现 紧急通知不受免打扰模式和静音模式约束。当紧急通知到达时,会有短暂提示音量和抖动(约2s)。未锁…...

即时零售:不可逆的进化

“人们经常问我,这个世界还是平的吗?我经常跟他们说,亲爱的,它真的是平的,比以前更平了。”2021年3月,《世界是平的》作者托马斯弗里德曼在演讲时说。如他所说,尽管逆全球化趋势加剧&#xff0c…...

零售数据总结经验:找好关键分析指标和维度

各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维数据分析,通过数据讲故事。 每逢月末、季末、年终,运营部门的同事又要开始进行年终总结分析。那么,对零售连锁企业来说,…...

从零开始搭建游戏服务器 第一节 创建一个简单的服务器架构

目录引言技术选型正文创建基础架构IDEA创建项目添加Netty监听端口编写客户端进行测试总结引言 由于现在java web太卷了,所以各位同行可以考虑换一个赛道,做游戏还是很开心的。 本篇教程给新人用于学习游戏服务器的基本知识,给新人们一些学习…...

C++中那些你不知道的未定义行为

引子 开篇我们先看一个非常有趣的引子&#xff1a; // test.cpp int f(long *a, int *b) {*b 5;*a 1;return *b; }int main() {int x 10;int *p &x;auto q (long *)&x;auto ret f(q, p);std::cout << x << std::endl;std::cout << ret <&…...

java基础面试题(四)

Mysql索引的基本原理 索引是用来快速寻找特定的记录&#xff1b;把无序的数据变成有序的查询把创建索引的列数据进行排序对排序结果生成倒排表在倒排表的内容上拼接上地址链在查询时&#xff0c;先拿到倒排表内容&#xff0c;再取出地址链&#xff0c;最后拿到数据聚簇索引和非…...

@PropertySource使用场景

文章目录一、简单介绍二、注解说明1. 注解源码① PropertySource注解② PropertySources注解2. 注解使用场景3. 使用案例&#xff08;1&#xff09;新增test.properties文件&#xff08;2&#xff09;新增PropertySourceConfig类&#xff08;3&#xff09;新增PropertySourceTe…...

【C语言进阶:刨根究底字符串函数】strtok strerror函数

本节重点内容&#xff1a; 深入理解strtok函数的使用深入理解strerror函数的使用⚡strtok Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part ofstr1sep参数是个字符串&#xff0c;定义了用作分隔符的字符集合。第一个参数指…...

西安石油大学C语言期末重点知识点总结

大一学生一周十万字爆肝版C语言总结笔记 是我自己在学习完C语言的一次总结&#xff0c;尽管会有许多的瑕疵和不足&#xff0c;但也是自己对C语言的一次思考和探索&#xff0c;也让我开始有了写作博客的习惯和学习思考总结&#xff0c;争取等我将来变得更强的时候再去给它优化出…...

读《Multi-level Wavelet-CNN for Image Restoration》

Multi-level Wavelet-CNN for Image Restoration&#xff1a;MWCNN摘要一. 介绍二.相关工作三.方法摘要 存在的问题&#xff1a; 在低级视觉任务中&#xff0c;对于感受野尺寸与效率之间的平衡是一个关键的问题&#xff1b;普通卷积网络通常以牺牲计算成本去扩大感受野&#…...

【Linux】安装DHCP服务器

1、先检测网络是否通 get dhcp.txt rpm -qa //查看软件包 rpm -qa |grep dhcp //确定是否安装 yum install dhcp //进行安装 安装完成后 查询 rpm -ql dhcp 进行配置 cd /etc/dhcp 查看是否有遗留dhcpd.conf.rpmsave 删除该文件 cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sampl…...

功能测试转型测试开发年薪27W,又一名功能测试摆脱点点点,进了大厂

咱们直接开门见山&#xff0c;没错我的粉丝向我投来了喜报&#xff0c;从功能测试转型测试开发&#xff0c;进入大厂&#xff0c;摆脱最初级的点点点功能测试&#xff0c;拿到高薪&#xff0c;遗憾的是&#xff0c;这名粉丝因为个人原因没有经过指导就去面试了&#xff0c;否则…...

数据结构之哈希表

常见的三种哈希结构 数组set&#xff08;集合&#xff09;map(映射) set&#xff08;集合&#xff09; 集合底层实现是否有序数值是否可以重复能否更改数值查询效率增删效率std::set红黑树有序否否O(log n)O(log n)std::multiset红黑树有序是否O(log n)O(log n)std::unordere…...

linux信号理解

linux信号&#xff1a;用户、系统或进程发送给目标进程的信息&#xff0c;以通知目标进程中某个状态的改变或是异常。 信号产生原因&#xff1a;软中断或者硬中断。可细分为如下几种原因&#xff1a; ①系统终端Terminal中输入特殊的字符来产生一个信号&#xff0c;比如按下&am…...

HC小区管理系统window系统安装教程

实操视频 HC小区管理系统局域网window物理机部署教程_哔哩哔哩_bilibili 一、下载安装包 百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1XAjxtpeBjHIQUZs4M7TsRg 提取码&#xff1a;hchc 或者 123盘 hc-window.zip官方版下载丨最新版下载丨绿色版下…...

自动化测试工具软测界的不二之选,还不快速来了解

目录 引言&#xff1a; 前言&#xff1a; 一.龙测AI-TestOps云平台使用教程 1.如何登录龙测AI-TestOps云平台 登录方法① 登录方法② 2.龙测AI-TestOps云平台界面布局 3.龙测AI-TestOps云平台菜单功能 ①创建项目 ②应用管理 ③设备管理 ④订单 二.总结 引言&#…...

centos系统/dev/mapper/centos-root目录被占满的解决方式

最近在做虚拟机部署docker微服务时&#xff0c;发现磁盘内存占满&#xff0c;无法进行操作。open /var/lib/dpkg/info/libc6:amd64.templates: no space left on device接下来就写下我在备份虚拟机上如何解决根目录被占满的问题&#xff1a;1、查看虚拟机磁盘使用情况df -h可以…...

【C++】STL容器、算法的简单认识

几种模板首先认识一下函数模板、类模板、栈模板。函数模板函数模板就是一个模型&#xff0c;而模板函数是函数模板经过类型实例化的函数。如下template<class T>是一个简单的函数模板&#xff1a;template<class T> T Max(T a, T b) {return a > b ? a : b; } …...

把python开发的web服务,打包成docker镜像的方法

要将Python开发的服务打成Docker镜像&#xff0c;可以按照以下步骤操作&#xff1a;1. 创建一个Dockerfile文件&#xff0c;该文件描述了如何构建Docker镜像。例如&#xff0c;以下是一个简单的Dockerfile文件&#xff0c;用于构建一个基于Python的Web应用程序&#xff1a; FRO…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...

Pandas 可视化集成:数据科学家的高效绘图指南

为什么选择 Pandas 进行数据可视化&#xff1f; 在数据科学和分析领域&#xff0c;可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具&#xff0c;如 Matplotlib、Seaborn、Plotly 等&#xff0c;但 Pandas 内置的可视化功能因其与数据结…...

前端打包工具简单介绍

前端打包工具简单介绍 一、Webpack 架构与插件机制 1. Webpack 架构核心组成 Entry&#xff08;入口&#xff09; 指定应用的起点文件&#xff0c;比如 src/index.js。 Module&#xff08;模块&#xff09; Webpack 把项目当作模块图&#xff0c;模块可以是 JS、CSS、图片等…...

使用python进行图像处理—图像变换(6)

图像变换是指改变图像的几何形状或空间位置的操作。常见的几何变换包括平移、旋转、缩放、剪切&#xff08;shear&#xff09;以及更复杂的仿射变换和透视变换。这些变换在图像配准、图像校正、创建特效等场景中非常有用。 6.1仿射变换(Affine Transformation) 仿射变换是一种…...

无头浏览器技术:Python爬虫如何精准模拟搜索点击

1. 无头浏览器技术概述 1.1 什么是无头浏览器&#xff1f; 无头浏览器是一种没有图形用户界面&#xff08;GUI&#xff09;的浏览器&#xff0c;它通过程序控制浏览器内核&#xff08;如Chromium、Firefox&#xff09;执行页面加载、JavaScript渲染、表单提交等操作。由于不渲…...