本文深入解析了 Linux 进程优先级的核心原理,阐述了优先级作为 CPU 资源分配顺序的本质意义。文章详细介绍了使用 ps -l 和 ps -al 查看进程状态的方法,重点剖析了 PRI(优先级)与 NI(Nice值)的计算公式 PRI(新) = PRI(旧) + NI 及其在内核调度中的作用,并演示了通过 top 和 renice 命令调整 Nice 值(范围 -20 至 19)的实操步骤。最后,文章梳理了进程竞争性、独立性以及并行与并发的区别,旨在帮助读者构建完整的 Linux 进程调度知识体系。
优先级实际上就是获取某种资源的先后顺序,而进程优先级实际上就是进程获取CPU资源分配的先后顺序,就是指进程的优先权(priority),优先权高的进程有优先执行的权力。
为什么存在进程的进程优先级呢? 优先级存在的主要原因就是资源是有限的,而存在进程优先级的主要原因就是CPU资源是有限的,一个CPU一次只能跑一个进程,而进程是可以有多个的,所以需要存在进程优先级,来确定进程获取CPU资源的先后顺序。
ps -l
包含重要信息解读:
UID:代表执行者的身份。PID:代表这个进程的代号。PPID:代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号。PRI:代表这个进程可被执行的优先级,其值越小越早被执行。NI:代表这个进程的nice值。#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
while(1)
{
printf("i am process,my PID:%d,my PPID:%d\n",getpid(),getppid());
sleep(2);
}
return 0;
}
在 Linux 中,每个 SSH 连接都会被分配一个独立的伪终端(如 pts/0、pts/1),ps -l 命令默认的作用域仅限于当前终端,因此具有隔离性,无法看到其他 SSH 窗口的进程;而当你使用 ps -al 时,参数 -a 指示系统显示所有终端下的进程,打破了窗口限制,所以你就能在新窗口成功“跨界”查看到原窗口运行的 proc 了。
即在linux中,用户调整进程优先级的方式是调整nice值
进程优先级的调整需要使用su将普通用户切换到root用户,因为调整进程优先级需要toot权限
su root进行提权
top命令就相当于Windows操作系统中的任务管理器,它能够动态实时的显示系统当中进程的资源占用情况。

使用top命令后按“r”键,会要求你输入待调整nice值的进程的PID。

输入进程PID并回车后,会要求你输入调整后的nice值。

输入nice值后按“q”即可退出,如果我们这里输入的nice值为10,那么此时我们再用ps命令查看进程的优先级信息,即可发现进程的NI变成了10,PRI变成90(80+NI)。

使用renice命令,后面跟上更改后的nice值和进程的PID即可。

注意:那么加入NI(nice)值后会变成PRI(新)=PRI(旧)+NI,注意这个旧的PRI为初始值一直不变,那么下次计算时,PRI仍然使用初始值进行计算。
综上所述,进程优先级是操作系统处理资源竞争、实现高效调度的关键机制,用户虽不能直接决定进程的最终优先级,但可以通过调整 Nice 值在限定范围(-20 到 19)内间接影响 PRI 值,从而改变进程获取 CPU 的权重。理解“基准 PRI 不变”的计算逻辑以及掌握 ps、top、renice 等工具的使用,能让我们更灵活地管理系统资源;同时,厘清并行与并发的概念,对于深入理解 Linux 内核如何在多任务环境下保障进程的独立性与高效推进具有重要的理论价值。