進(jìn)程調(diào)度是linux中非常重要的概念。linux內(nèi)核有一套高效復(fù)雜的調(diào)度機(jī)制梦染,能使效率極大化埋虹,但有時(shí)為了實(shí)現(xiàn)特定的要求猜憎,需要一定的人工干預(yù)。比如搔课,你希望操作系統(tǒng)能分配更多的CPU資源給瀏覽器進(jìn)程胰柑,讓瀏覽速度更快、更流暢爬泥,操作體驗(yàn)更好柬讨。那具體應(yīng)該怎么做呢?盡管linux的進(jìn)程調(diào)度算法十分復(fù)雜袍啡,但都是以進(jìn)程的優(yōu)先級(jí)為基礎(chǔ)的踩官。因此,只需要改變進(jìn)程的優(yōu)先級(jí)即可境输。
在linux中蔗牡,nice
命令用于改變進(jìn)程的優(yōu)先級(jí)。
nice
命令嗅剖?什么鬼辩越?哪有命令直接說(shuō)自己“nice”的?咋一看信粮,這個(gè)名字確實(shí)很“nice”区匣,只是這里的“nice”是指“niceness”,即友善度蒋院、謙讓度亏钩。用于進(jìn)程中,表示進(jìn)程的優(yōu)先級(jí)欺旧,也即進(jìn)程的友善度姑丑。niceness值為負(fù)時(shí),表示高優(yōu)先級(jí)辞友,能提前執(zhí)行和獲得更多的資源栅哀,對(duì)應(yīng)低友善度;反之称龙,則表示低優(yōu)先級(jí)留拾,高友善度。
nice
命令格式:nice [OPTION] [COMMAND [ARG]...]
鲫尊。
當(dāng)nice沒(méi)有選項(xiàng)時(shí)痴柔,輸出值表示系統(tǒng)進(jìn)程缺省的niceness值,一般為0疫向。
xie@xie-VirtualBox:~$ nice
0
當(dāng)nice
命令中沒(méi)有給出具體的niceness值時(shí)咳蔚,默認(rèn)為10豪嚎。如nice vi
設(shè)置vi進(jìn)程的niceness為10。
-n 選項(xiàng)
-n
選項(xiàng)后面跟具體的niceness值谈火。niceness值的范圍-20~19侈询,小于-20或大于19的值分別記為-20和19。
xie@xie-VirtualBox:~$ nice -n 10 vi&
該命令設(shè)置vi進(jìn)程的niceness值為10糯耍,也就是較低的優(yōu)先級(jí)扔字。
如果設(shè)置的niceness值為負(fù),那么必須要有管理員權(quán)限温技。這也不難理解革为,當(dāng)niceness為負(fù)時(shí),意味著該進(jìn)程要搶占其他進(jìn)程的資源荒揣,必須要有權(quán)限才行篷角;如果niceness為正,即表示謙讓度高系任,這對(duì)其他進(jìn)程來(lái)說(shuō)是喜聞樂(lè)見(jiàn)的恳蹲,也當(dāng)然就不用權(quán)限認(rèn)證了。
可以通過(guò)ps -l
查看進(jìn)程的niceness值俩滥。
xie@xie-VirtualBox:~$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1635 1634 0 80 0 - 2178 wait pts/13 00:00:00 bash
0 T 1000 1677 1635 0 90 10 - 1767 signal pts/13 00:00:00 vi
0 R 1000 1678 1635 0 80 0 - 1606 - pts/13 00:00:00 ps
NI列即表示進(jìn)程的niceness值嘉蕾。vi進(jìn)程對(duì)應(yīng)的NI值正好為剛設(shè)置的10。那PRI列又是什么呢霜旧?PRI表示進(jìn)程當(dāng)前的總優(yōu)先級(jí)错忱,值越小表示優(yōu)先級(jí)越高,由進(jìn)程默認(rèn)的PRI加上NI得到挂据,即PRI(new) = PRI(old) + NI以清。由上程序,進(jìn)程默認(rèn)的PRI是80崎逃,所以加上值為10的NI后掷倔,vi進(jìn)程的PRI為90。
所以个绍,需要注意的是勒葱,NI即niceness的值只是進(jìn)程優(yōu)先級(jí)的一部分,不能完全決定進(jìn)程的優(yōu)先級(jí)巴柿,但niceness值的絕對(duì)值越大凛虽,效果越顯著。
--adjustment=N 選項(xiàng)
--adjustment選項(xiàng)和-n選項(xiàng)的效果是一樣的广恢,在等號(hào)右邊設(shè)置對(duì)應(yīng)的niceness值即可凯旋。
xie@xie-VirtualBox:~$ nice --adjustment=16 vi&
[1] 1681
xie@xie-VirtualBox:~$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1635 1634 0 80 0 - 2178 wait pts/13 00:00:00 bas
0 T 1000 1681 1635 0 96 16 - 1767 signal pts/13 00:00:00 vi
0 R 1000 1682 1635 0 80 0 - 1606 - pts/13 00:00:00 ps
注意,直接使用“-N”也可以設(shè)置niceness值。比如瓦阐,nice -12 vi&
將vi的niceness值設(shè)置為12蜗侈,如果是nice --12 vi&
的話篷牌,則設(shè)置niceness的值為-12睡蟋。這很容易混淆,建議使用-n或--adjustment選項(xiàng)枷颊,不易出錯(cuò)戳杀。
其他選項(xiàng)
--help 顯示幫助信息
--version 顯示版本信息
renice命令
以上討論的都是為即將運(yùn)行的進(jìn)程設(shè)置niceness值,而renice
用于改變正在運(yùn)行的進(jìn)程的niceness值夭苗。
renice
信卡,字面意思即重新設(shè)置niceness值,進(jìn)程啟動(dòng)時(shí)默認(rèn)的niceness值為0题造,可以用renice更新傍菇。
renice
語(yǔ)法:renice
[優(yōu)先等級(jí)][
-g<程序群組名稱>...][
-p<程序識(shí)別碼>...][-u <用戶名稱>...]
如:
renice -5 -p 5200 #將PID為5200的進(jìn)程的niceness設(shè)為-5
renice -5 -u xie #將屬于用戶xie的進(jìn)程的niceness設(shè)為-5
renice -5 -g group1 #將屬于group1組的程序的niceness設(shè)為5