当前位置: 代码迷 >> 综合 >> 【Linux】优先级、环境变量
  详细解决方案

【Linux】优先级、环境变量

热度:87   发布时间:2023-11-28 01:11:46.0

在这里插入代码片@[TOC]

一、优先级

1. 概念

RPI进程优先级:值越小越先被执行

NI:nice值,可被执行的优先级的修正数字

新的优先级 = 老优先级 + nice值(NI)

nice取值范围:-20 - 19 一共40个

image-20220404144015317

优先级可以通过系统中的接口设置

man nice
man renice

2. 调整优先级

image-20220404154404177

top   //之后按r进入修改数值,q退出

调整优先级,这里改的是nice的值

输入了80,但最高是19

image-20220404154501468


3. 优先级调整规则

进行两次修改

renice分别是10 和 5

image-20220404154855369

这里修改都是从80的基准进行加减

**注意:**优先级再怎么设置,也只能是一种相对的优先级,不能出现绝对的
优先级,否则会出现很严重的进程“饥饿问题”(有进程长时间得不到调用)

**调度器:**较为均衡的让每个进程享受到CPU资源


二、环境变量

在Linux中,命令,程序,工具都是可执行文件

而指令为什么不需要指明路径?

1. 查看环境变量

常见环境变量:

PATH : 指定命令的搜索路径

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

SHELL : 当前Shell,它的值通常是/bin/bash

echo $PATH

image-20220404162022335

目录以:分隔,按顺序查找

image-20220404162305218

可以将可执行文件放进这里的目录(但自己的会污染它的命令池)


  • 而我们通常说的软件安装,就是将可执行文件放在系统环境变量特定的目录里

  • 或者将这里的文件路径导入到目录里

export PATH=$PATH:地址(可以通过pwd获得)

image-20220404181558441

直接使用文件名即可运行(但注意这里文件名一定要比较特殊/不容易重复),不然是没有反应的

image-20220404202932596


windows底下也有环境变量

image-20220404203544287


为什么两个用户登录默认的文件路径不同?

因为环境变量不同

echo $HOME

image-20220404204157274


查看shell的环境变量

echo $SHELL


查看各种环境变量信息

env

image-20220404204413881


环境变量()本质:是0S在内存/磁盘文件中开辟的空间,用来保存系统相关的数据。


2. 本地变量

本次登录有效

a=10
echo $a

取消本地变量

unset a

  • set 显示本地变量和环境变量
set

image-20220404210208812


3. 代码获取环境变量

  • 获取指令内容
    1 #include <iostream>2 #include <cstdlib>3 #include <unistd.h>4 5 using namespace std;6 7 int main(int argc, char* argv[])8 {
    9   for(size_t i = 0; i < argc; i++)                                                                                                                10   {
    11     cout << "ARGV= " <<argv[i]<< endl;12   }13   return 0;14 }

image-20220404232711365

命令都看作字符串,argc决定有效字符串个数

指令有很多选项,用来完成同一个命令的不同子功能

选项底层使用的就是命令行参数,通过控制条件(argv的内容)来调整指令


  • 获取环境变量信息
int main(int argc, char* argv[], char* env[])

image-20220404234052761

前面的信息就相当于env的数组来调控的


  • 因为env 是个数组,元素都是字符串 char* 所以系统提供了一个第三方变量environ获取
#include <stdio.h>
int main()
{
    extern char **environ;int i = 0;for(; environ[i]; i++){
    printf("%s\n", environ[i]);}return 0;
}

image-20220405102522089


  • 其他获得环境变量的方法
man getenv
 16 int main()17 {
    18   cout << "home:" << getenv("HOME") << endl;19   cout << "path:" << getenv("PATH") << endl;20   return 0;21 

image-20220405103748568


4. 环境变量有全局属性

可以被子进程继承

命令行上启动的进程,父进程都是bash

而本地变量不具有全局属性,只有将本地变量添加到环境变量内部。

再次启动一个程序才有bash

export 本地变量名称