进程优先级与环境变量(Linux基础)

1.进程优先级

首先区分优先级与权限。

  • 权限:能否执行某个"事物"。
  • 优先级:使用某个"事物"的顺序.
  1. 为什么要有优先级?

    当要被管理的对象很多时候。

  2. 怎么样使用优先级

    进程优先级决定了哪个进程优先使用资源。

1.1 pri和nice值

编写一个程序,让它运行起来,查看进程的信息
在这里插入图片描述
进程的优先级pri,ni(nice)表示优先级的修正数据。
优先级真正的值是pri+nice后的值。
Linux中调整优先级值的大小,就是通过调整nice值来实现的。nice的取值范围为-20-19,一共40个级别。也就是说pri(new)=pri(old)+nice
在这里插入图片描述
使用sudo,获取root权限输入正确的nice值。得到70。
在这里插入图片描述
需要注意的是,你重新修改nice值的话,不是在70的基础上进行加减。
pri(new)=pri(old)+nice而是在80的基础上,也就是说pri(old)不变。
假如你输入的nice值,超过区间[-20,19],超过最大值按19进行处理,超过最小值按-20进行处理。

其实,除非特殊情况不要修改进程的优先级。

1.2 进程的其他概念

在这里插入图片描述

2. 环境变量

在这里插入图片描述
当我们把程序运行起来。

  • 从硬件角度来看,程序从硬盘中被加载到内存。
  • 从软件角度来看,os为这个程序创建task_struce结构体。
    他就成为了进程。

我们再来看一个问题。
当我们运行自己写的程序,需要加./表示当前路径。

那么像我们经常使用的ls,makedir,rm等等命令也是程序,为啥他就不需要加路径就能运行。

当我们要运行一个程序,先要找到他,然后再运行。./的目的就是为了找到他,像ls这种程序,一定有某种默认查找路径来查找出他。
这种默认查找路径我们放在了path环境变量中。很明显环境变量也是一种变量,变量是有变量名+变量内容构成。
我们用echo $PATH来查看他的内容
在这里插入图片描述
冒号作为分隔符,呈现出若干个子路径,执行命令时,在子路径一个个进行查找。找不到就会报错comand not find

那如果我们编写的程序想要不带路径,显然有两种方式。
第一种,把proc所在的绝对路径放在PATH环境变量的子路径中。
第二种,编写程序时把程序放在/usr/bin目录中

其实第二种会污染Linux环境,我们并不推荐。第一种在我们再次登录时会删除我们添加的路径(想永久保留需要修改配置文件)

那么怎么放呢?
我们可以过export来设置环境变量,注意千万不能像下面这样否则环境变量就会全部改变,只有这一条路径,所有命令都用不了了。
在这里插入图片描述
正确的做法:
在这里插入图片描述
查看发现当前路径环境变量已添加,不需要带路径运行成功。

在这里插入图片描述

除了PATH,还有一些常见的环境变量,都是通过echo $NAME来进行查看。

  • PATH : 指定命令的搜索路径
  • HOSTHOME:当前主机名
  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
  • SHELL : 当前Shell,它的值通常是/bin/bash
    在这里插入图片描述
    通过env可以查看这些环境变量

在这里插入图片描述

2.1 简单总结一下环境变量:

  1. 什么是环境变量?
    系统中某些具有全局性质的变量,通常是为了满足系统的某些需求。
  2. 为什么需要环境变量?
    为了满足开发者,用户,系统进行简化的查找,确定,定位等问题。
  3. 怎么样使用?
    在命令行中使用env,export以及echo $NAME等

2.2 编程语言怎么获取环境变量

我们平时写的main函数其实是有参数的。
从左到右依次是:
命令行参数的个数,命令行参数,环境变量。

2.21 命令行参数的个数与命令行参数

平时使用的命令也是程序,比如ls,他后面可以带参数从而表现出不同结果。
我们也可以让自己编写的程序呈现出这样的效果。

   #include<iostream>
    using namespace std;
   int main(int argc,char* argv[],char* env[])
     {
      for(int i=0;i<argc;i++)
      {
       cout<<"argv["<< i<<"]"<<argv[i]<<endl;
      }
      return 0;
    }                                                                         


在这里插入图片描述
也就是说我们可以通过if语句来让他输入不同参数时显示出不同的效果

    1 #include<iostream>
    2 #include<string>
    3 using namespace std;
    4 
    5 int main(int argc,char* argv[],char* env[])
    6 {
    7   for(int i=0;i<argc;i++)
    8   {
    9     cout<<"argv["<<i<<"]:"<<argv[i]<<endl;
   10   }
   11   string s = argv[1];
   12   if(s=="-a")
   13   {
   14   cout<<"hello a"<<endl;
   15   }
   16   else{
   17     cout<<"hello b"<<endl;                                                                                                                                                           
   18   }
   19   return 0;
   20 }

在这里插入图片描述
在c,c++中,argv[0],表示可执行程序

2.22 环境变量

在这里插入图片描述
我们通过打印env数组来打印出环境变量

 #include<iostream>
    2 #include<string>
    3 
    4 using namespace std;                              
    5                                                   
    6 int main(int argc,char* argv[],char* env[])
    7 {
    8   for(int i=0;env[i];i++)
    9   {
   10         cout<<i<<":"<<env[i]<<endl;                                       
   11   }        
   12   return 0;
   13 }

在这里插入图片描述
那么假如我们想获得环境变量PATH

      #include<iostream>
    2 #include<stdlib.h>                                                                                                                                                                   
    3 using namespace std;
    4 
    5 int main(int argc,char* argv[],char* env[])
    6 {
    7   cout<<getenv("PATH")<<endl;
    8   return 0;
    9 }

在这里插入图片描述

也可以打印pwd,从而获取当前的路径

      #include<iostream>
    2 #include<stdlib.h>
    3 using namespace std;
    4 
    5 int main(int argc,char* argv[],char* env[])
    6 {
    7   cout<<getenv("PWD")<<endl;                                                                                                                                                         
    8   return 0;
    9 }
  ~
  ~

在这里插入图片描述
切到上级目录,获取当前路径。这样就自己实现了一个pwd
在这里插入图片描述
注意:环境变量具有全局属性,父进程的环境变量信息是可以被子进程继承下去的。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楠c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值