一、概述
1、简介
Linux进程调度及多任务,每个CPU在一个时间点上只能处理一个进程,通过时间片技术,来同时运行多个程序
二、优先级范围及特性
1、优先级范围
优先级分为系统和nice优先级,在top中显示的优先级有两个,PR值和nice值。
NI:实际nice值。
PR(NI+20):将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39。
如图优先级范围,黄色部分是nice优先级范围是-20——19这个范围是我们能更改的,黑色部分是系统优先级这个是我们无法更改的,进程的nice优先级要加上20才是进程在系统中的优先级(为了防止我们更改的一些nice优先级超过系统进程的优先级导致系统的错误)。
2、优先级的特性
nice值越大:表示优先级越低,例如+19。
nice值越小:表示优先级越高,例如-20。
三、查看进程的nice级别
命令:ps axo pid ,command,nice
[root@localhost ~]# ps axo pid,command,nice PID COMMAND NI 1 /usr/lib/systemd/systemd -- 0 2 [kthreadd] 0 4 [kworker/0:0H] -20 5 [kworker/u256:0] 0 6 [ksoftirqd/0] 0 7 [migration/0] - 8 [rcu_bh] 0 9 [rcu_sched] 0 10 [lru-add-drain] -20 11 [watchdog/0] - 13 [kdevtmpfs] 0 14 [netns] -20 15 [khungtaskd] 0 16 [writeback] -20 17 [kintegrityd] -20 18 [bioset] -20 19 [bioset] -20 20 [bioset] -20
四、启动 具有不同nice级别的进程
1、默认情况
启动进程时,通常会继承父进程的nice级别,默认为0。
2、手动启动(以sleep为例)
1)了解sleep命令
命令:sleep 数字 //sleep是睡眠是等待命令后面跟的数字代表等待多少秒。
sleep 数字 & //加上&表示不占用前台让sleep在后台运行。
[root@localhost ~]# sleep 3 //表示要等待3秒才能执行后面的命令 [root@localhost ~]# sleep 6000 & //等待6000秒,在后台运行不占用前台 [1] 2972 //该进程的pid
2)手动启动不同nice
命令:nice -n nice值 命令
[root@localhost ~]# nice -n -5 sleep 6000& //将sleep 6000这个进程的nice优先级设为-5 [2] 3012 //该进程的pid [root@localhost ~]# nice -n -15 sleep 7000& //将sleep 7000这个进程的nice优先级设为-15 [3] 3019 //该进程的pid [root@localhost ~]# ps axo pid,command,nice|grep sleep //查看sleep的进程 3011 sleep 60 0 3012 sleep 6000 -5 3019 sleep 7000 -15
五、更改现有进程的nice级别
1、创建一个睡眠示例程序
命令:sleep 8000 &
[root@localhost ~]# sleep 8000& [4] 3110 //该进程的pid
2、修改nice值
命令:renice nice值 pid
[root@localhost ~]# renice -20 3110 //修改3110进程的nice为-20 3110 (进程 ID) 旧优先级为 0,新优先级为 -20 [root@localhost ~]# top -d 1 -p 3110 //查看3110的动态进程信息 Cpu(s): 6.1 us, 2.0 sy, 0.0 ni, 91.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 995676 total, 72252 free, 684976 used, 238448 buff/cache KiB Swap: 2097148 total, 2070356 free, 26792 used. 153160 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3110 root 0 -20 108052 356 280 S 0.0 0.0 0:00.00 sleep
可以看出3110进程的系统优先级(PR)为0,nice优先级(NI)为-20。PR的值=NI的值+20。