每个进程有一个优先级属性,CPU利用该属性判断哪个工作比较重要,需要优先执行。我们可以使用 ps 观察优先级
[root@linux ~]# ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 0 18851 18827 0 77 0 - 1302 wait pts/0 00:00:00 su 4 S 0 18852 18851 0 76 0 - 1349 wait pts/0 00:00:00 bash 4 R 0 19510 18852 0 76 0 - 1111 - pts/0 00:00:00 ps
说明
PRI 是 Priority 的简写, NI 是 nice 的简写,两值叠加产生目前的 PRI 值!PRI 越小时,代表该程序可以具有『越早被优先执行』的意思。NI (nice) 则是我们操作值额外给予的一个数值, 他可以影响PRI 的值,他的相关性是这样的:
- PRI(new) = PRI(old) + nice
不过您要特别留意到,如果原本的 PRI 是 50 ,并不是我们给予一个 nice = 5 ,就会让 PRI 变成 55 喔! 因为 PRI 是系统『动态』决定的,所以,虽然 nice 值是可以影响 PRI ,不过, 最终的 PRI 仍是要经过系统分析后才会决定的。另外, nice 值是有正负的喔,而既然 PRI 越小越早被执行, 所以,当 nice 值为负值时,那么该程序就会降低 PRI 值,亦即会变的较优先被处理。此外,您必须要留意到:
- 一般使用者的 nice 值为 0 ~ 19 ;
- root 可用的 nice 值为 -20 ~ 19 ;
- 一般使用者仅可将 nice 值越调越高,如果本来 nice 为 5 ,则未来仅能调整到大于 5 的 nice ;
- 一般使用者仅能调整属于自己的程序的 nice 值。
这也就是说,要调整某个程序的优先执行序,就是『调整该程序的 nice 值』啦!那么如何给予某个程序 nice 值呢?有两种方式,分别是:
- 一开始执行程序就立即给予一个特定的 nice 值:用 nice 指令;
- 调整某个已经存在的 PID 的 nice 值:用 renice 指令。
top命令同样也是可以调整已经存在的某个process的nice的喔!