进程优先级和环境变量

server/2024/11/15 6:52:35/

1.优先级

1.优先级的概念

cpu资源分配的先后顺序,就是指进程的优先级,linux中进程的优先级数字越小,优先级越高;

2.为什么要有优先级

进程访问的资源(cpu)始终是有限的,而系统中进程又是比较多的,所以进程访问要有顺序,优先级高的先调用,

操作系统关于调度和优先级的原则:

分时操作系统,保证基本的公平,每个进程都能被调用,如果进程长时间不被调度,会造成饥饿问题

3.linux优先级的特点和查看方式

ps:用于显示当前系统中进程的状态

PRI:进程优先级

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

nice的调整是有限制的,修改范围位[-20,19],而且每次调整优先级,PRI的值都是从80开始的,避免修改叠加

2.命令行参数

1.命令行参数演示

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

main函数的参数可带可不带,

这些参数的意义:

argc表示命令行传递给程序的参数个数,

argv是一个字符指针数组,argv[0]表示程序的名称,argv[1]表示第一个参数,以此类推,直到最后的NULL,

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

2.为什么要有命令行参数

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

命令行中启动的程序,都会变成进程,其实都是bash的子进程,父进程的数据,默认对于子进程是能看到并访问的,但是子进程的后续修改,对于父进程是看不到的,

3.环境变量

1.概念

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

比如我们在编写C/C++代码时,在链接时,不知道我们的动态链接库在哪,也能链接成功,原因就是环境变量帮助编译器查找,

比如:PATH环境变量

系统中的很多配置,在我们登录linux系统的时候,就已经被加载到bash进程中(内存),最开始的环境变量在配置文件中,然后被加载到bash中,

2.查看环境变量

env:查看所有环境变量

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

export name=value:设置环境变量

unset name:取消设置的环境变量

也可以设置本地变量

name=value 不加export

本地变量只在bash内部有效,不被添加到环境变量中,无法被子进程继承,我们也可以将本地变量导入环境变量中,才可以被子进程获取

export 变量名

我们也可以用代码来查看环境变量

#include<stdio.h>
#include<string.h>
#include<unistd.h>int main()
{extern char**environ;int i=0;for(i=0;environ[i];i++){printf("env[%d]->%s \n",i,environ[i]);}return 0;
}

environ是一个字符指针数组,全局变量,用来储存环境变量,每个指针都指向一个以'\0'结尾的字符串,或者给main函数传参也可以

#include<stdio.h>
#include<string.h>
#include<unistd.h>int main(int argc,char*argv[],char*env[])
{int i=0;for(i=0;env[i];i++){printf("env[%d]->%s \n",i,env[i]);}return 0;
}

bash进程启动时默认会给子进程提供两张表,argv[]命令行参数表,env[]环境变量表,命令行参数表从用户输入命令行提供,环境变量表从操作系统的配置文件提供,

我们还可以通过系统调用函数,来查看环境变量,

getenv()

#include<stdio.h>
#include<stdlib.h>int main()
{printf("path:%s\n",getenv("PATH"));                                                                                                        return 0;
}

getenv()是一个获取环境变量值的函数,

  • 如果找到了指定的 name 环境变量,getenv 函数返回一个指向该环境变量值的指针。
  • 如果没有找到该环境变量,函数返回 NULL

3.环境变量具有全局属性

#include <stdio.h>
#include <stdlib.h>
int main()
{char * env = getenv("MYENV");if(env){printf("%s\n", env);}return 0;
}

当我们直接查看一个不存在的环境变量MYNV。是查不到的,但是我们通过导入环境变量的方式

export MYENV="hello world"

再次运行程序,就可以查到该环境变量了

4.内建命令和普通命令

linux系统中,命令分为内建命令和普通命令,

内建命令本身是shell的一部分,不是由新的进程调用的,是由shell解释器直接执行,因此不需要创建进程

普通命令是独立的可执行文件,/bin,/usr/bin目录中,这些命令在执行时会创建新的进程


http://www.ppmy.cn/server/119692.html

相关文章

Spring Boot-WebSocket相关问题

Spring Boot 中的 WebSocket 相关问题及解决方案 WebSocket 是一种双向的实时通信协议&#xff0c;它允许客户端和服务器之间建立持久连接&#xff0c;并在此连接上双向传输数据。与传统的 HTTP 请求-响应模型不同&#xff0c;WebSocket 能够显著减少网络开销和延迟&#xff0…

【系统架构设计】基于中间件的开发

【系统架构设计】基于中间件的开发 中间件技术J2EE.NET企业应用集成 中间件技术 中间件属于可复用软件的范畴&#xff0c;处于操作系统、网络和数据库之上&#xff0c;应用软件的下层。 J2EE J2EE 是针对 Web Service、业务对象、数据访问和消息报传送的一组规范。这组应用编…

RTX NVIDIA 3090卡配置对应pytorch,CUDA版本,NVIDIA驱动过程及问题整理

买了两块3090卡闲置很长时间了&#xff0c;之前tf 1.12.0版本用习惯了不想转工具。这段时间闲下来转了之后有些环境不适配&#xff0c;在雷神帮助下安装完毕&#xff0c;虽然出了点怪东西&#xff0c;整体还好。 原环境CUDA为11.4 其他配置如下 之前conda install的pytorch实为…

定义可引用的 CI/CD 配置文件中的输入参数

极狐GitLab 是一个一体化的 DevOps 平台&#xff0c;内置 CI/CD 功能。在极狐GitLab 15.11 中&#xff0c;我们引入了一项令人兴奋的新功能&#xff0c;允许用户为可包含的配置文件定义输入参数。 通过在 CI 模板中使用输入参数的功能&#xff0c;您可以将模板中的任何关键字替…

贪心算法day31|56. 合并区间、738. 单调递增的数字(整数与字符串的转换)、贪心刷题总结

贪心算法day31|56. 合并区间、738. 单调递增的数字、贪心刷题总结 56. 合并区间738. 单调递增的数字贪心刷题总结 56. 合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 …

计组之中断

目录 一. 程序查询方式二. 多重中断三. 程序中断方式四. DMA方式 \quad 一. 程序查询方式 \quad out打印命令 I/O接口的方式是多种多样的 \quad 二. 多重中断 \quad 关中断不会响应任何中断信号 注意是IF 中断服务程序 屏蔽字的作用就是屏蔽一些中断&#xff0c;优先级…

[产品管理-29]:NPDP新产品开发 - 27 - 战略 - 分层战略与示例

目录 1. 公司战略 2. 经营战略 3. 创新战略 4. 新产品组合战略 5. 新产品开发战略 战略分层是企业规划和管理的重要组成部分&#xff0c;它涉及不同层级的战略制定和实施。以下是根据您的要求&#xff0c;对公司战略、经营战略、创新战略、新产品组合战略、新产品开发战略…

【数据结构】什么是二叉搜索(排序)树?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;二叉搜索(排序)树的概念 &#x1f4cc;二叉搜索(排序)树的操作 &#x1f38f;二叉搜索树的查找 &#x1f38f;二叉搜索树的插入 &#x1f38f;二叉搜索树的…