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

这篇具有很好参考价值的文章主要介绍了【Linux】环境变量和进程优先级。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

环境变量

什么是环境变量

系统结构

系统接口

深度解析

命令行参数

进程优先级

优先级查看

优先级修改

进程间的概念


环境变量

什么是环境变量

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

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

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

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

env

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

🍮其中我们可以看到

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

USER : 当前用户名

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

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

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

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

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

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

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

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

【Linux】环境变量和进程优先级🍮PATH 中存的便是指定命令的搜索路径,因此若想直接用文件名运行程序,就需要让操作系统能够找到我们这个程序

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

【Linux】环境变量和进程优先级 🍮如此我们便能够直接使用文件名来运行自己的代码了。

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

系统结构

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

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

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

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

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

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

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

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

系统接口

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

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

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

#include<iostream>
#include<cstdlib>
#include<unistd.h>
#include<cstdio>

int main()
{

    char* p = getenv("PWD");
    std::cout<<p<<std::endl;
    return 0;
}

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

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

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

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

#include<iostream>
#include<cstdlib>
#include<unistd.h>
#include<cstdio>

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

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

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

深度解析

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

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

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

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

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

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

命令行参数

🍮平时我们都在使用 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<<envp[i]<<std::endl;
    }
    return 0;
}

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

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

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

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

    return 0;
}

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

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

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

#include <cstdio>
#include <iostream>
#include <cstring>
#include <unistd.h>
#include <cstdlib>

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;
}

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

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

进程优先级

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

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

🍮为什么有优先级?

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

优先级查看

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

ps -l

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

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

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

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

优先级修改

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

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

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

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

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

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

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

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

进程间的概念

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

🍮好了,今天环境变量和进程优先级的讲解到这里就结束了,如果这篇文章对你有用的话还请留下你的三连加关注。 文章来源地址https://www.toymoban.com/news/detail-426893.html

到了这里,关于【Linux】环境变量和进程优先级的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【Linux】进程优先级 && 命令行参数 && 环境变量

    【Linux】进程优先级 && 命令行参数 && 环境变量

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 一、进程优先级 1.1、进程优先级的基本概念 1.2、优先级 VS 权限 1.3、为什么要有优先级? 1.4、Linux的优先级的特点 查看方式 1.5、PRI and NI 1.6、用top命令更改已存在进程的nice 1.7、其

    2024年03月25日
    浏览(6)
  • 【Linux】环境变量与进程优先级知识点

    【Linux】环境变量与进程优先级知识点

    环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。 PATH : 指定命令的搜索路径 HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录) SHELL : 当前Shell,它的值通常是/bin/bash USER:记录了当前登录的用户是谁 主要以PATH进行学习

    2023年04月23日
    浏览(43)
  • 【Linux】探索Linux进程优先级 | 环境变量 |本地变量 | 内建命令

    【Linux】探索Linux进程优先级 | 环境变量 |本地变量 | 内建命令

    最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门

    2024年02月04日
    浏览(40)
  • 【Linux进行时】环境变量and进程优先级

    【Linux进行时】环境变量and进程优先级

    ❓首先一个问题:我写的代码(这个代码很简单,不用管)编译之后运行的时候为什么要带./ ? 或者说我怎么才可以让我不用带./ ? 💡.代表当前文件下,/是文件分隔符,这是用相对路径的方式来访问,所以我们也可以用绝对路径 myproc和ls都是指令,ls可以直接输入,但是我

    2024年02月08日
    浏览(11)
  • [Linux 进程(三)] 进程优先级,进程间切换,main函数参数,环境变量

    [Linux 进程(三)] 进程优先级,进程间切换,main函数参数,环境变量

    排队的本质就是确认优先级。 优先级是什么?它也是PCB中的一个整型字段 , 数值越小,优先级越高 。是得到某种资源的先后顺序。 Linux进程的优先级数值范围:60~99。 Linux中默认进程的优先级都是80。 为什么要有优先级 ?本质是资源不足。 谈到优先级,就不得不说我们以

    2024年01月21日
    浏览(7)
  • 【看表情包学Linux】进程优先级 | 查看系统进程 | 优先级修改 | 进程的切换 | 竞争性与独立性 | 并行并发的概念 | 环境变量

    【看表情包学Linux】进程优先级 | 查看系统进程 | 优先级修改 | 进程的切换 | 竞争性与独立性 | 并行并发的概念 | 环境变量

       🤣  爆笑 教程  👉 《看表情包学Linux》👈   猛戳订阅     🔥 ​ 💭 写在前面: 我们先讲解进程的优先级,探讨为什么会存在优先级,以及如何查看系统进程、进程优先级的修改。然后讲解进程的切换,首次介绍进程的竞争性、独立性,以及并行和并发的概念,在通

    2024年01月19日
    浏览(12)
  • 【探索Linux】—— 强大的命令行工具 P.8(进程优先级、环境变量)

    【探索Linux】—— 强大的命令行工具 P.8(进程优先级、环境变量)

    前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的一些知识,也学习了一些Linux的基本操作,也了解并学习了有关Linux开发工具vim 、gcc/g++ 使用、yum工具以及git 命令行提交代码也相信大家都掌握的不错,上一篇文章我们了解了关于进程的基本概念,今

    2024年02月09日
    浏览(15)
  • 2.【Linux】(进程的状态||深入理解fork||底层剖析||task_struct||进程优先级||并行和并发||详解环境变量)

    2.【Linux】(进程的状态||深入理解fork||底层剖析||task_struct||进程优先级||并行和并发||详解环境变量)

    Linux把所有进程通过双向链表的方式连接起来组成任务队列,操作系统和cpu通过选择一个task_struct执行其代码来调度进程。 1.运行态:pcb结构体在运行或在运行队列中排队。 2.阻塞态:等待非cpu资源就绪(硬盘,网卡等资源) 3.挂起态:一个进程对应的代码和数据被操作系统因

    2024年01月22日
    浏览(11)
  • 【Linux进程篇-----进程优先级】

    【Linux进程篇-----进程优先级】

    1.基本概念 cpu 资源分配的先后顺序,就是指进程的优先权(priority) .优先权高的进程有优先执行权利。配置进程优先权对多任务环境的 Linux 很有用,可以改善系统性能。还可以把进程运行到指定的 CPU 上,这样一来,把不重要的进程安排到某个 CPU,可以大大改善系统整体性能

    2024年02月08日
    浏览(9)
  • 【Linux】进程优先级

    【Linux】进程优先级

    Hello,大家好。本文我们要来介绍的是有关Linux下【进程优先级】,首先我们要了解的是其基本概念 在 Linux基础篇之权限 一文中我们有谈到过什么是权限,在Linux下有权限和无权限的区别在哪里。那现在的话我们就要来对比一下【权限】和【优先级】这两个概念 权限 : 表示

    2024年02月11日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包