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

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

一、进程优先级
1. 优先级概念

进程优先级(Process Priority)是操作系统用来决定进程获取CPU资源的顺序的一种机制。一般来说,进程优先级较高的进程会获得更多的CPU时间片,从而更频繁地执行。进程优先级的设置通常由操作系统或系统管理员来决定,而不是由普通用户来指定。进程优先级的目的是根据进程的重要性或性能需求来分配系统资源,以实现对系统资源的合理分配和性能调整。较高优先级的进程通常会被更快地响应和执行,而较低优先级的进程则可能会被抑制或推迟。
2. Linux查看系统进程

在linux系统中,用ps –l命令则会类似输出以下几个内容:
在这里插入图片描述
我们很容易注意到其中的几个重要信息,有下:

    UID : 代表执行者的身份。
    PID : 代表这个进程的代号。
    PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号。
    PRI :代表这个进程可被执行的优先级,其值越小越早被执行。
    NI :代表这个进程的nice值。

3. PRI(Priority)和NI(Nice)

PRI是指进程的实际优先级(Priority)。在Unix/Linux系统中,PRI是一个整数值,代表了进程在调度时的优先级。较低的PRI值表示较高的优先级,而较高的PRI值表示较低的优先级。系统中的PRI值范围可以是不固定的,具体取决于操作系统的实现。

NI是指进程的Nice值(Nice Value)。Nice值是Unix/Linux系统中用于调整进程优先级的参数。Nice值的范围通常是从-20到19,其中-20是最高优先级,19是最低优先级。与PRI不同的是,较低的NI值表示较低的优先级,而较高的NI值表示较高的优先级。

PRI和NI之间存在一个简单的转换关系。通常,PRI = 20 + NI,即PRI值等于20加上Nice值。因此,通过修改NI值,可以间接地修改进程的PRI值,从而调整进程的优先级。

可以使用nice命令来设置进程的Nice值。例如,使用以下命令可以将进程的Nice值设置为10:

nice -n 10 command
其中,command是要执行的命令或程序。

除了使用nice命令外,还可以使用renice命令来修改已经运行的进程的Nice值。例如,使用以下命令可以将进程的Nice值修改为5:

renice -n 5 -p pid


其中,pid是要修改Nice值的进程的进程ID。

🚨🚨注意:只有具有足够权限的用户才能修改进程的NI值,一般需要管理员或具有特殊权限的用户才能进行修改。
二、环境变量
1. 概念

环境变量是操作系统中用于存储和管理系统级别的配置信息的一种机制。它们是由操作系统或应用程序设置的键值对,用于指定特定应用程序或整个系统在运行时的行为。环境变量通常包含一些重要的配置信息,如路径、语言、时区等。通过设置和读取环境变量,可以在不修改应用程序本身的情况下,对其进行配置和定制。应用程序可以使用环境变量来获取配置参数或根据不同的环境执行不同的操作。

在不同的操作系统中,设置和读取环境变量的方法可能会有所不同。例如,在Unix和Linux系统中,可以使用"export"命令设置环境变量,通过"$"符号引用环境变量的值。
2. 查看环境变量方法

在Linux下,可以使用以下方法来查看环境变量:

    使用"printenv"命令:
    在终端中输入"printenv"命令,将显示当前会话中的所有环境变量及其对应的值。

    使用"echo"命令:
    可以使用"echo"命令来显示单个环境变量的值。例如,要查看"PATH"环境变量的值,可以输入以下命令:

echo $PATH

类似地,可以将"$"符号后面的部分替换为所需的环境变量名称。

    使用"env"命令:
    "env"命令可以显示当前会话中的环境变量和其值。在终端中输入"env"命令即可显示所有环境变量。

    查看特定配置文件:
    根据不同的Linux发行版,可能会有不同的配置文件保存环境变量。在常见的发行版如Ubuntu和CentOS中,可以查看"/etc/environment"文件来获取全局环境变量的值。

注意:这些方法都是在终端中查看当前会话中的环境变量。如果您希望查看永久环境变量(即在每次登录时都生效的环境变量),则可以查看用户的bash配置文件,如~ /.bashrc或~/.bash_profile中的设置。
3. 环境变量的组织方式

在这里插入图片描述
每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串。
4.通过代码获取环境变量

    命令行第三个参数

#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{
    int i = 0;
    for(; env[i]; i++)
    {
        printf("%s\n", env[i]);
    }
    return 0;
}


    通过第三方变量environ获取

#include <stdio.h>
int main(int argc, char *argv[])
{
    extern char **environ;
    int i = 0;
    for(; environ[i]; i++)
    {
        printf("%s\n", environ[i]);
    }
    return 0;
}

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

    全局性:Linux环境变量是在整个操作系统级别定义和生效的。它们对所有用户和进程都是全局可见的,因此可以在系统中的任何位置和任何进程中使用和访问。

    动态性:Linux环境变量可以在运行时动态地进行修改、添加或删除。这意味着可以根据需要更改环境变量的值,而无需重新编译或重启程序。

    字符串格式:Linux环境变量的值通常以字符串的形式表示。这使得环境变量非常适合存储配置信息、路径、用户名等文本数据。

    持久性:Linux环境变量可以在系统启动时由各种不同的方式进行设置。例如,在/etc/profile、~/.bashrc 或 /etc/environment 等文件中设置环境变量,使其在系统启动时自动加载。

    继承性:Linux环境变量可以被派生进程继承。这意味着当创建子进程时,子进程会继承父进程的环境变量。这种特性使得环境变量可以在整个进程树中自动传递并共享。

    临时性:Linux环境变量可以在当前的终端会话中设置,并在会话结束后自动消失。这对于临时设置和调试非常有用。

    SHELL变量和环境变量:在Linux中,有些特殊的环境变量被称为SHELL变量,用于控制和配置当前的Shell环境。这些变量在当前Shell中起作用,而不会传递给其他进程。

总结

一、进程优先级:

    优先级概念:进程优先级决定了进程在系统资源分配和竞争中的优先级别。优先级较高的进程会在资源有限时获得更多的处理时间和资源。
    Linux查看系统进程:通过命令行工具如top、ps等可以实时查看系统中运行的进程以及它们的优先级信息。
    PRI(Priority)和NI(Nice):在Linux中,进程的优先级主要通过PRI和NI来表示。PRI的范围是-20(最高优先级)到+19(最低优先级),而NI的范围是-20到+19,它们之间存在一定的关系。较小的PRI值表示较高的优先级。

二、环境变量:
环境变量在Linux系统中具有重要作用,用于存储和传递配置信息、路径、用户名等。具体内容如下:

    概念:环境变量是在操作系统层面上定义和生效的全局变量,它们可以在系统中的任何位置和任何进程中使用和访问。
    查看环境变量方法:使用printenv或echo命令可以在终端中查看当前环境变量的值,或者通过env命令列出所有环境变量。
    环境变量的组织方式:环境变量以key-value的形式存储,其中key是变量名,value是变量的值。多个环境变量以列表或配置文件的形式进行组织。
    通过代码获取环境变量:可以使用编程语言提供的函数如getenv来获取指定环境变量的值,然后在代码中进行使用。
    环境变量的特点:环境变量具有全局性、动态性、文本格式等特点。它们可以全局共享、动态修改,适应不同的环境和配置需求。

 
118    2024-01-15 16:39:12