Linux进程优先级解读
目录
- 1.概念
- 1.1基本概念
- 1.2优先级vs权限
- 1.3为什么要有优先级?
- 2.查看系统进程
- 2.1PRI和RI
- 2.2PRI vs NI
- 3.修改进程优先级的命令
- 3.1用top命令更改已存在进程的nice
- 3.2nice 命令
- 3.3renice 命令
- 4.其他概念
- 5.总结
1.概念
1.1基本概念
cpu资源分配的先后顺序,就是指进程的优先权(priority)。
优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。
还可以把进程运行到指定的CPU上,这样一来,把不重要的进程编程客栈安排到某个CPU,可以大大改善系统整体性能。
Linux中优先级数字越小,优先级越高。
1.2优先级vs权限
简单的说优先级和权限的区别:
- 优先级:已经能了,获取资源的顺序。(排队号)
- 权限:能不能获取资源。(python准考证)
对比维度 | 优先级(Priority) | 权限(Permission) |
---|---|---|
定义 | 进程获取 CPU 资源的优先顺序,决定调度优先级 | 规定用户 / 用户组对文件 / 目录的访问、修改、执行权限 |
作用对象 | 仅针对运行中的进程(Process) | 仅针对文件和目录(File/Directory) |
核心目标 | 优化 CPU 资源分配,提升系统响应速度和运行效率 | 保护资源安全,防止未授权访问或操作 |
数值 / 标识范围 | - 静态优先级:nice值(-20~19,值越小优先级越高)- 动态优先级:内核根据进程状态动态调整 | - 权限标识:r(读)、w(写)、x(执行)- 适用用户:u(所有者)、g(所属组)、o(其他用户) |
常用操作命令 | - nice:启动进程时设置优先级(如nice -n 5 ./app)- renice:调整已有进程优先级(如renice -10 1234)- chrt:设置实时进程优先级 | - chmod:修改权限(如chmod 755 file)- chown:修改所有者(如chown user:group file)- chgrp:修改所属组(如chgrp group file) |
示例场景 | - 后台备份进程设为低优先级(避免影响前台操作)- 实时监控进程设为高优先级(确保及时响应) | - 系统配置文件仅root可写(rw-r--r--)- 脚本文件添加执行权限(chmod +x script.sh) |
与用户身份的关系 | 普通用户只能降低自身进程优先级(或提升至有限范围),root可任意调整 | 权限与用户身份强关联(所有者权限 > 组权限 > 其他用户权限),root拥有权限豁免权 |
1.3为什么要有优先级?
进程访问的资源(尤其是 CPU)始终是有限的,而系统中同时运行的进程往往数量较多,不可避免会出现资源竞争。
操作系统的调度机制虽以 “分时” 为基础,追求基本公平,但若无优先级区分,可能导致关键进程(如实时响应、系统核心任务)被非关键进程挤占资源,出现响应卡顿或延迟 ;同时,若完全 “平均分配” 资源,还可能引发 “饥饿问题”—— 某些进程因长期得不到足够调度而陷入停滞。
2.查看系统进程
2.1PRI和RI
- 老规矩:先写个简单的进程代码:
#include <stdio.h> #include <sys/types.h> #include <unistd.h> int main() { printf("I am a process! pid=%d\n",getpid()); return 0; }
ps -al
PRI | 代表这个进程可被执行的优先级,其值越小越早被执行 |
NI | 进程优先级的修正数据,nice 值,nice其取值范围是-20至19,一共40个级别。 新的优先级 = 优先级(默认80) + nice, 这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被 执行,所以调整进程优先级,在Linux下,就是调整进程nice值。 |
2.2PRI vs NI
需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化。
可以理解nice值是进程优先级的修正修正数据
3.修改进程优先级的命令
3.1用top命令更改已存在进程http://www.devze.com的nice
- 输入top
- 进入top后按“r”–>输入进程PID–>输入nice值
PRI 为99=进程默认值80 +nice值19 ,之前介绍 nice其取值范围是-20至19,即使我们输入了100,nice值还是19,是为了防止调度出现问题,把优先级控制在可控范围内。
- 再次修改nice值会失败,进程优先级不能经常修改
- 可以使用root修改
- 我们
结果变成了70,说明进程优先级是= 进程默认值+nice值 。
3.2nice 命令
nice 命令用于在启动进程时设置其优先级。其原理是通过指定nice值(也叫NI值)来编程调整进程的基本优先级(PRI) ,新的优先级计算公式为:新的优先级 = 基本优先级 + nice 值。
nice值的范围是 - 20 到 19,数值越小,进程的优先级越高,也就意味着该进程在争夺 CPU 资源时更具优势,能获得更多的 CPU 时间片。但普通用户只能设置 nice 值为 0 到 19,只有 root 用户可以设置为 - 20 到 19 的任意值。
- 语法格式:
nice [ -n <nice值> ] <命令> [<命令参数>]
- 示例:
sudo nice -n -10 ./myprocess
3.3renice 命令
renice命令用于修改已经在运行中的进程的优先级。在系统运行过程中,你可能发现某个进程占用资源过多影响了其他关键进程,或者某个后台进程优先级太低执行过慢,这时就可以使用 renice 来动态调整其www.devze.com优先级。
- 语法格式:
renice [ -n <nice值> ] <进程PID> # 对指定用户启动的所有进程调整优先级 renice [ -n <nice值> ] -u <用户名>
- 示例:
renice 10 2873999
4.其他概念
术语 | 含义说明 |
---|---|
竞争性 | 系统进程数目众多,而 CPU 资源有限(甚至仅有 1 个),因此进程之间存在资源竞争。为实现高效任务处理和合理资源竞争,引入了优先级机制。 |
独立性 | 多进程运行时需独享各类资源,进程间运行过程互不干扰。 |
并行 | 多个进程在多个 CPU 上分别同时运行,称为并行。 |
并发 | 多个进程在单个 CPU 上通过进程切换的方式,在一段时间内使多个进程均得以推进,称为并发。 |
5.总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
精彩评论