栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux--环境变量

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux--环境变量

文章目录
      • 进程优先级
        • 基本概念
        • 查看系统进程
        • PRI 和 NI
        • 用top命令更改已存在进程的nice
        • 其他关于进程得概念
      • 环境变量
        • 基本概念
        • 常见环境变量
        • 和环境变量相关的命令
        • 环境变量的组织方式

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

  • UID:代表执行该进程的身份

  • PID:代表这个进程的代号

  • PPID:代表这个 进程的父进程代号

  • PRI:代表这个进程的 可以被执行的优先级,值越小优先级越高

  • NI:代表这个进程的nice值

PRI 和 NI
  • PRI比较好理解,就是进程的优先级,通俗来讲就是程序被CPU执行的先后顺序,值越小优先级越高
  • NI就是我们所说的nice值,表示进程可被执行优先级的修正数值
  • PRI值越小程序就越快被执行,加入nice值之后,PRI(new) = PRI(old) + nice
  • 当nice值为负数的时候,该程序会将优先级的值变小,即其优先级会变高,则其越快被执行
  • 所以调整进程优先级,在linux下,就是调整进程的nice值
  • nice值得**取值范围是-20 ~ 19,一共40个级别

PS:进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化,nice值是进程优先级的修正数据

用top命令更改已存在进程的nice

进入top之后,按“r“ ==> 输入进程PID ==> 输入nice值

值得一提的是,我们前面讲到PRI(new) = PRI(old) + nice,这里的PRI(old)每次在改变nice值得时候,都是以80作为PRI(old)

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

    例如:我们在编写C/C++代码的时候,在链接的时候,我们从来不知道我们所链接的动静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找

  • 环境变量通常具有某些特殊用途,在系统当中通常具有全局特性

常见环境变量
  • PATH:指定命令的搜索路径

  • HOME:指定用户的主工作目录(即用户登录到Linux系统中时,默认的目录)

  • SHELL:当前shell,他的值通常时/bin/bash
查看环境变量的方法:
echo $NAME    # NAME是要查看的环境变量名称

举个例子:

我们在执行我们自己编写的程序时往往需要执行./myproc,这样才能执行我们写的程序。这个./其实就是在找我们可执行程序存在的路径,那么如果我们想不用./就能执行我们写的可执行文件要怎么弄呢?这时候只需要我们把我们的文件路径导入到PATH变量中即可。

export PATH=$PATH:文件路径

和环境变量相关的命令
  1. echo:显示某个环境变量
  2. export:设置一个新的环境变量
  3. env:显示所有的环境变量
  4. unset:清除环境变量
  5. set:显示本地定义的shell变量和环境变量

举个例子:

环境变量的组织方式

每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以""结尾的环境字符串

Linux中可以使用env来查看环境变量的信息

这里不太明显,我们写一个程序来看看环境变量是怎么获取的。首先我们得先理解一个东西,叫做命令行参数。

我们在linux中使用ls -a -l等指令,其实就是使用的命令行参数,我们给程序传入不同的参数,它执行不同的操作。

  1 #include  
  2 #include  
  3 #include  
  4 using namespace std;  
  5   
  6 int main(int argc, char* argv[])  
  7 {  
  8   if(argc > 2)  
  9   {  
 10     cout << "list:"<<"./myproc [-a|-b]" << endl;            
 11   }                                       
 12                                           
 13   if(strcmp("-a", argv[1])==0)            
 14   {                                       
 15     cout << "hello" << endl;              
 16   }                                       
 17   else if(strcmp("-b", argv[1])==0)       
 18   {                                       
 19     cout << "hello word" << endl;         
 20   }                                       
 21   else{                                   
 22     cout << "error" << endl;              
 23   }                                       
 24   return 0;                               
 25 }   

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

命令行第三个参数获取环境变量

    1 #include
    2 #include
    3 #include
    4 using namespace std;
    5 
    6 
    7 // 通过命令行参数获取环境变量
    8 int main(int argc, char* argv[], char* env[])
    9 {
   10   int i = 0;
   11   for(;env[i];++i)
   12   {
   13     cout << env[i] < 

通过第三方变量environ获取环境变量

  1 #include
  2 #include
  3 #include
  4 using namespace std;
  5 
  6 // 通过第三方变量environ获取环境变量
  7 int main()
  8 {
  9   extern char** envrion;
 10   int i = 0;
 11   for(;environ[i];++i)
 12   {
 13     cout << environ[i] << endl; 
 14   }                      
 15   return 0;              
 16 } 

通过系统调用获取或设置环境变量

  1 #include
  2 #include
  3 #include
  4 using namespace std;
  5 
  6 // 系统调用获取环境变量
  7 int main()
  8 {
  9   printf("%sn", getenv("PATH"));// 获取名为PATH的环境变量 
 10   return 0;                       
 11 }

环境变量通常是具有全局属性,可以被子进程继承下去

  1 #include  
  2 #include  
  3 #include  
  4 using namespace std;  
  5   
  6 // 系统调用获取环境变量  
  7 int main()  
  8 {  
  9   int pid = fork();  
 10   if(pid == 0)// 获取名为PATH的环境变量  
 11   {  
 12     printf("child:%d  %sn",getpid(), getenv("MYENV"));
 13   }
 14   else{
 15     
 16     printf("father:%d  %sn",getpid(), getenv("MYENV"));             
 17   }                         
 18   return 0;                 
 19 }                           

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887931.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号