返回顶部
首页 > 资讯 > 操作系统 >【Linux】环境变量和进程优先级
  • 495
分享到

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

linux运维服务器 2023-08-31 18:08:14 495人浏览 薄情痞子
摘要

目录 环境变量 什么是环境变量 系统结构 系统接口 深度解析 命令行参数 进程优先级 优先级查看 优先级修改 进程间的概念 环境变量 什么是环境变量 🍮平时在使用 Linux 的时候,总会使用 ls 、pwd 这类的

目录

环境变量

什么是环境变量

系统结构

系统接口

深度解析

命令行参数

进程优先级

优先级查看

优先级修改

进程间的概念


环境变量

什么是环境变量

🍮平时在使用 Linux 的时候,总会使用 ls pwd 这类的命令,我们也都知道这些命令也是 语言写的,但是为什么我们自己写的可执行程序需要加上 ./ 才能运行?

🍮这是因为一些在操作系统中用来指定操作系统运行环境的一些参数已经被存储到了环境变量表中

🍮这些特定的人在特定的场景中被使用的变量就叫环境变量

🍮我们可以通过 env 来查看整张环境变量表。

env

🍮其中我们可以看到

PATH : 指定命令的搜索路径
HOME : 指定用户的主工作目录(即用户登陆到linux系统中时,默认的目录)

USER : 当前用户名

🍮之后可以使用 echo + $ + 环境变量名 ,查看变量的内容。

echo $USER    //这里查看用户名这个环境变量

 

🍮这里的 可以理解成使用指针时的 * ,因为若直接使用 echo 打印,则会输出输入的字符串

也可以使用 set 查看本地变量和环境变量,且内容相较于环境变量多了许多。

🍮又绕回一开始的问题,我们若想直接用文件名运行程序该怎么办呢?其中的奥秘就在这个 PATH 之中。

🍮看这一串路径是否有些眼熟?我们平时使用的命令就存在这些路径下

🍮PATH 中存的便是指定命令的搜索路径,因此若想直接用文件名运行程序,就需要让操作系统能够找到我们这个程序

🍮现有两种方法能够实现这个操作,其一便是将我们想要直接运行的文件直接拷贝到当前 PATH 的路径下。

🍮其二则是将目标文件所在的路径加入到 PATH 路径下。

🍮我们可以使用 export 定义或修改环境变量。

export 环境变量名=变量中的内容

 🍮像这样我们便定义了一个环境变量,并且能够在环境变量表之中找到。

 🍮有了这个命令那么我们就能够将我们文件的路径加入到 PATH 之中了,但是千万不能直接像这样使用

export PATH=/home/Alpaca/linux-code-library/text.4.18/environ  (文件所在路径)

 

🍮否则便会像如上这样,我们甚至无法找到系统自带的命令,但是确实是能够直接运行自己的程序。

🍮若真的将自己的 PATH 整个改掉的话,不要慌张,重新连接一次服务器即可

🍮实际上需要这样写,就能将我们当前路径追加到 PATH 之中。

export PATH=$PATH:/home/Alpaca/linux-code-library/text.4.18/environ  (文件所在路径)

 🍮如此我们便能够直接使用文件名来运行自己的代码了。

 

系统结构

🍮虽然我们成功将我们当前的路径插入到了环境变量之中,但是只要我们关闭连接,再次打开后便会发现,我们的环境变量又恢复了原样

🍮因为我们的环境变量就存在环境变量表中,所以每次我们添加新的环境变量就相当于往这个表中插入数据

🍮而环境变量表本质就是内存级的一张表,这张表在用户登录系统的时候,系统便会给用户生成一张属于自己的环境变量表

🍮那环境变量所对应的数据都是从哪来的呢?我们可以看看 /etc 路径下的 bashrc 文件,便能观察到一系列环境变量是如何配置的

🍮而系统也正是执行这些特定的配置文件,进而配置当前用户的环境变量表。

🍮正因为每个用户的环境变量都是独有一份,因此可以通过对用户名环境变量的检测来进行权限的限制。不仅如此,环境变量还可以被相关的子进程继承下去

系统接口

🍮系统给我们提供了一个接口 (getenv( )) 供我们访问环境变量。根据 man 手册我们可以知道,我们需要给这个函数一个变量名,之后它便会在环境变量表之中进行查找。找到便返回指向目标内容的指针,反之则返回空指针

🍮我们便很容易写出这样的代码。

#include#include#include#includeint main(){    char* p = getenv("PWD");    std::cout<

 🍮之后我们将程序运行便发现,实际打印出来与 PWD 环境变量的内容一模一样。

🍮本质上调用代码使其运行的就是 bash ,因而二者本身就是父子进程之间的关系bash 的环境变量能在子进程之中存在 ,也恰好证明了环境变量能够被相关子进程继承的这一结论。

🍮不仅如此,还可以直接使用外部环境变量表的指针进行访问

#include#include#include#includeint main(){    extern char** environ;            //声明外部变量    for(int i = 0;environ[i];i++)     //直到内容为空结束打印    {        printf("environ[%d]: %s\n",i,environ[i]);    }    return 0;}

🍮这样便可以打印出一张环境变量表。

深度解析

🍮在 Linux 中不仅有环境变量,还有另一种变量叫做本地变量,定义环境变量时不加  export 定义的便是本地变量。

🍮但本地变量与环境变量不同的地方在于,其无法被子进程继承。因此我们在代码中是无法访问到本地变量的

🍮之后我们不再需要这个变量后可以使用 unset 将其删除。

命令行参数

🍮平时我们都在使用 main 函数,但你知道 main 函数也有参数吗?其实 main 函数中最多能有三个参数。

int main(int arGC, char *argv[], char *envp[]){    return 0;}

其中 envp 就是环境变量表, 我们直接打印便能够得到完整的环境变量表。

int main(int argc, char *argv[], char *envp[]){    for(int i = 0;envp[i];i++)    {        std::cout<

🍮重点在于 argc 和 argv ,不知道各位有没有想过: 为什么我们在使用命令的时候还能够加上选项

🍮在上面我们已经知道,使用命令本质上是运行一个可执行程序。那么后面跟上的选项又该如何理解呢

🍮由于 argv 也是一个指针数组我们不妨用以下代码将 argv 的内容打印出来看看。

int main(int argc, char *argv[], char *envp[]){    for(int i = 0;argv[i];i++)    {        std::cout<

🍮可以看出,命令的选项以字符串的形式传给了参数,因此有了不同的参数。

🍮因此我们也可以根据运行时所带选项的不同,使程序执行不同的任务

#include #include #include #include #include int main(int argc, char *argv[], char *envp[]){    if (argc == 1)    //没有参数的情况    {        std::cout << "------------------" << std::endl;        printf("无任务执行,已退出\n");        std::cout << "------------------" << std::endl;        exit(0);    }    if (argc != 2)    //参数过多的情况    {        std::cout << "------------------" << std::endl;        std::cout << "输入样例不合法" << std::endl;        std::cout << "------------------" << std::endl;        exit(2);    }    // 判断参数    if (strcmp(argv[1], "-a") == 0)    {        std::cout << "------------" << std::endl;        std::cout << "执行A任务" << std::endl;        std::cout << "------------" << std::endl;    }    else if (strcmp(argv[1], "-b") == 0)    {        std::cout << "------------" << std::endl;        std::cout << "执行B任务" << std::endl;        std::cout << "------------" << std::endl;    }    else if (strcmp(argv[1], "-c") == 0)    {        std::cout << "------------" << std::endl;        std::cout << "执行C任务" << std::endl;        std::cout << "------------" << std::endl;    }    else    {        std::cout << "无目标指令" << std::endl;    }    return 0;}

🍮根据传入参数的不同,从而进行不同的任务。

进程优先级

🍮我们在以前学习过权限的相关内容,而权限与优先级的本质区别在于:

  • 权限决定的是能或不能
  • 优先级则是已经能,决定谁先谁后

🍮为什么有优先级?

cpu 资源有限,当资源不足时根据优先级进行分配,保证先执行最重要的程序

优先级查看

🍮通过 ps -l 我们可以查看进程的优先级。

ps -l

🍮其中 UID 代表的是用户,系统通过 UID 识别用户,但有一个专属的字符串与 UID 对应,供用户使用。

🍮而表示优先级的是 PRI PRI 越小进程优先级别就越高。

🍮NI 为修正数据,范围为[-20,19],一般来说不直接更改 PRI 而是通过修改 NI 从而达到修改优先级的效果。

优先级修改

  • 使用 top 进入任务管理器
  • 输入 r 进入 renice 模式
  • 输入要更改 NI 值进程的 PID
  • 输入更改的 NI 

  

🍮如此便完成了修改。NI 的修改值如果超出了范围,则会修改成范围最贴近的那个值。

🍮值得注意的一点是:PRI(new) = PRI(old)+NI

🍮其中的 PRI(old) ,每次都为 80 ,即更改 NI 时刻关系着 PRI 的大小

进程间的概念

  • 竞争性: 系统进程数目多,而 CPU 资源少,进程之间具有竞争属性。为了高效完成任务,更合理竞争相关资源,便有了优先级
  • 独立性: 多进程运行,运行期间互不干扰
  • 并行: 多个进程在多个 CPU 下分别同时运行。
  • 并发: 多个进程在一个 CPU 下采用进程切换的方式,在一段时间之内,使多个进程都得以推进
     

🍮好了,今天环境变量和进程优先级的讲解到这里就结束了,如果这篇文章对你有用的话还请留下你的三连加关注。 

来源地址:https://blog.csdn.net/Lin_Alpaca/article/details/130325827

--结束END--

本文标题: 【Linux】环境变量和进程优先级

本文链接: https://lsjlt.com/news/386583.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【Linux】环境变量和进程优先级
    目录 环境变量 什么是环境变量 系统结构 系统接口 深度解析 命令行参数 进程优先级 优先级查看 优先级修改 进程间的概念 环境变量 什么是环境变量 🍮平时在使用 Linux 的时候,总会使用 ls 、pwd 这类的...
    99+
    2023-08-31
    linux 运维 服务器
  • 【Linux】进程状态|优先级|进程切换|环境变量
    文章目录 1. 运行队列和运行状态2. 进程状态3. 两种特殊的进程僵尸进程孤儿进程 4. 进程优先级5. 进程切换进程特性进程切换 6. 环境变量的基本概念7. PATH环境变量8....
    99+
    2023-09-02
    linux 运维 服务器
  • 【Linux】进程优先级
    一、基本概念 Hello,大家好。本文我们要来介绍的是有关Linux下【进程优先级】,首先我们要了解的是其基本概念 在 Linux基础篇之权限 一文中我们有谈到过什么是权限,在Linux下有...
    99+
    2023-08-31
    linux 服务器 运维
  • Linux进程学习【环境变量】
    ✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Per...
    99+
    2023-09-02
    linux 学习 centos 运维 服务器
  • 【看表情包学Linux】进程优先级 | 查看系统进程 | 优先级修改 | 进程的切换 | 竞争性与独立性 | 并行并发的概念 | 环境变量
      🤣 爆笑教程 👉 《看表情包学Linux》👈 猛戳订阅  🔥 ​ 💭 写在前面:我们先讲解进程的优先级,探讨为什么会存在优先级,以及如何查看系统进程、进程优...
    99+
    2023-09-10
    服务器 运维 linux
  • Linux环境变量和进程地址空间介绍
    目录linux环境变量和进程地址空间通过代码获取环境变量进程地址空间关于为什么是虚拟地址,而不是物理地址?Linux环境变量和进程地址空间 //查看进程pid和父进程 [dy@VM-12-10-centos jinc...
    99+
    2022-06-04
    Linux环境变量 linux进程地址空间
  • 【Linux】Linux环境变量的理解 --- 命令行参数、shell子进程、环境变量、本地变量…
    加油布鲁斯,你能行的! 文章目录 一、环境变量PATH中的系统默认搜索路径1.将程序安装到/usr/bin目录(不带./运行自己写的程序)2.将程序路径添加到PATH环境变量里面(不带./运行自己写的程序) 二、环境变量的深度...
    99+
    2023-08-25
    linux 服务器 运维
  • Java线程优先级变量及功能
    目录前言:Java线程优先级示例Java线程优先级的优势结论前言: 线程被称为“最小的处理单元”,是一个轻量级的子进程,分配了一些需要执行的工作。线程共享分配...
    99+
    2024-04-02
  • 【Linux】环境变量
    大家好我是沐曦希💕 文章目录 一、基本概念二、常见的环境变量1.查看环境变量的方法 三、系统调用获取环境变量四、设置环境变量1.子进程继承2.PWD 五、命令行参数六、代码获取环境变量七、写在最后1.环...
    99+
    2023-08-23
    linux bash 运维 vim 服务器
  • linux中进程有没有优先级
    今天小编给大家分享一下linux中进程有没有优先级的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2023-04-20
    linux
  • 如何分析Linux环境变量和进程地址空间
    如何分析Linux环境变量和进程地址空间,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Linux环境变量和进程地址空间//查看进程pid和父进程[dy@VM-12-10-cen...
    99+
    2023-06-25
  • [Linux打怪升级之路]-环境变量
    前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、认识环境变量 二、获取环境变...
    99+
    2023-09-01
    linux 运维 服务器
  • Linux Shell脚本系列教程(三):变量和环境变量
    一、玩转变量和环境变量 变量是任何一种编程语言都必不可少的组成部分,用于存放各种类型的变量。脚本语言大多是弱类型语言(动态语言),也就是说在使用变量时,不需要事先声明变量的类型,只需要直接赋值就可以。在Ba...
    99+
    2022-06-04
    变量 脚本 环境变量
  • 【Linux】关于进程的理解、状态、优先级和进程切换
    文章目录 📝一、操作系统进程1.运行队列2.运行状态 📝二、Linux进程状态📝三、两个特殊进程1.僵尸进程2.孤儿进程 ...
    99+
    2023-09-06
    linux 服务器 运维
  • linux配置环境变量
    第一种方法.配置全局的环境变量 第一步(非必须):可以输入export命令,查看已有的环境变量 2.第二步:输入 vi /etc/profile 进入配置文件 3.第三步:如果是新增环境变量的话,...
    99+
    2023-09-15
    linux 服务器 运维
  • 如何实现Linux Shell脚本变量和环境变量
    这篇文章主要讲解了“如何实现Linux Shell脚本变量和环境变量”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现Linux Shell脚本变量和环境变量”吧!一、玩转变量和环境变量...
    99+
    2023-06-09
  • Linux的进程优先级NI和PR有哪些区别呢
    这篇文章将为大家详细讲解有关Linux的进程优先级NI和PR有哪些区别呢,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。为什么要有进程优先级这似乎不用过多的解释,毕竟自从多任务操作系统诞生以来...
    99+
    2023-06-16
  • Win11如何调高进程的优先级?Win11调高进程的优先级方法
      相信很多使用过电脑的小伙伴都知道,系统资源是有限的,因此我们在打开很多的应用程序就需要设置一个优先级,那么使用Win11系统的电脑要如何去进行这个设置呢?其实操作起来还是很简单的,下面就和小编一起来看看方法吧。   ...
    99+
    2023-05-19
    Win11调高进程 进程优先级
  • Linux环境变量是什么
    这篇文章主要介绍了Linux环境变量是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux环境变量是什么文章都会有所收获,下面我们一起来看看吧。linux系统是多用户的任务系统,对于每个用户都可以指定特...
    99+
    2023-06-28
  • linux 配置java 环境变量
    上传jdk至/usr/local/下 解压jdk tar -zxvf jdk-8u271-linux-x64.tar.gz 配置环境变量 在/etc/profile中最后增加 export JAVA_HOME=/usr/local/jdk1...
    99+
    2023-09-08
    java linux 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作