Linux中的每个任务都有其优先级。这个优先级的范围从20到19。优先级越低(20),分配给任务的CPU时间就越多。默认的优先级是0。
并非所有的任务都需要使用相同的优先级。交互式应用要求快速响应,否则用起来很不顺手。通过crontab运行的后台任务只需要在下次被调度运行之前执行完毕就行了。
nice命令可以修改任务的优先级。它能以指定的优先级启动任务。降低任务的优先级会释放出资源给其他任务。
12.8.1 实战演练
不加任何参数的nice命令会输出任务的当前优先级:
$ cat nicetest.shecho "my nice is `nice`"$ sh nicetest.shmy nice is 0
在nice后面跟上另一个命令名,会以10为优先级运行该命令 ① ,也就是在任务默认优先级值上加10:
①这里的
10也可以认为代表的是任务的友善度(niceness)。友善度越高(值越大),占用的资源就越少。这种方式更容易理解nice命令。
$ nicesh nicetest.shmy nice is 10
如果在nice后面所跟的命令名之前加上一个值,那么就会以指定的优先级执行该命令:
$ nice -15 sh nicetest.shmy nice is 15
只有超级用户能够指定负值来提升任务的优先级(更小的数字):
# nice -adjustment=-15 nicetest.shmy nice is -15
12.8.2 工作原理
nice命令会修改内核的调度表,以更高或更低的优先级运行任务。表示优先级的值越小,调度器分配给任务的CPU时间就越多。
12.8.3 补充内容
renice命令可以修改正在运行的任务的优先级。占用大量资源,但对运行时间没有特别要求的任务可以利用该命令降低优先级(madenicer)。top命令能够找出占用CPU最多的那些任务。
调用renice命令时需要指定新的优先级值以及进程ID(PID):
$ renice 10 1234512345: old priority 0, new priority 10
