1. kill
在進程管理中的應用
還記得,之前在Linux 之 進程管理 -- 工作管理 (job control)中,我們有提到 通過
kill -signal %jobnumber
的 方式 管理bash背景中的工作嗎?(jobnumber
就是通過jobs
獲得的bash中的工作號碼)當然kill的功能不止局限于bash的工作控制,在今天學習的進程管理中同樣適用。
這里借用鳥哥的圖,把kill的一些常用代號詳細解釋一下,弱弱得說...
(沒什么可神秘的,kill進行 進程管理 的常用代號和之前在 工作管理 中學到的一摸一樣嘛)
1.1 通過 kill -signal PID
進程管理
kill -signal PID
(PID就是我們通過ps
或top
觀察到的進程號)
- 強調:kill后面直接加
PID數字
與加上%jobnumber
的情況是不同的!(%專門用在bash的工作控制中) - 舉例:找出rsyslogd的進程PID,并使其重新讀取配置文件
-- 找出PID的操作:ps aux | grep 'rsyslogd' | grep -v 'grep' | awk '{print $2}
;翻譯成人話:通過ps aux
獲得系統的各項進程情況,擷取出rsyslogd
的進程(考慮到grep 'rsyslogd'
實質上是一個grep
進程,所以后面用grep -v 'grep'
除去),并打印第二列的PID號碼
-- 為rsyslogd傳遞“重新讀取配置文件”的信號:kill -1 PID
orkill -SIGHUP PID
既然我們到目前為止學了兩次
kill
,那便在這里做一下總結:工作模式
kill -signal XXX
- kill 可以幫我們將這個
signal
傳送給XXX
:(%jobnumber)或者是某個 PID(直接輸入數字)。- 想傳遞什么信息就用什么
signal
,詳細的signal
信息可以通過kill -l
或man 7 signal
查詢(不要因為人家名叫殺死
就認為它只能殺掉進程時用,功能多多得包含在signal
。。。)
1.2 通過killall -signal 指令名稱
進程管理
這是懶人的做法,因為考慮到kill
后面只能接jobnumber
或PID
,這便要配合ps
或pstree
等命令,我不想手打那么多命令怎么辦?killall -signal 指令名稱
拯救你~
工作模式: killall [-iIe] [command name]
-
-i
interactive的意思,交互式的,若需要刪除時,會出現提示字符給用戶 -
-e
exact 的意思,表示“后面接的command name 要一致”,但整個完整的指令 -
-I
指令名稱(可能含參數)忽略大小寫
可以這么理解:kill
以 進程 為單位進行進程管理,killall
是以指令 為單位進行進程管理(如果要刪除某個服務,最簡單的方法就是利用killall
,因為他可以將系統當中所有以某個指令名稱啟動的進程全部刪除) - 舉例:給予rsyslogd這個指令啟動的進程一個SIGHUP的訊號,可以使用命令
killall -1 rsyslogd
orkillall -SIGHUP rsyslogd
下面是鳥哥舉的例子
killall 的應用舉例
2. 進程的執行順序管理
2.1了解 Priority 與 Nice 值
我們之前都有提到過Priority 與 Nice 值,他們決定了進程的執行順序,PRI值越低代表越優先的意思。不過這個PRI值是由核心動態調整的,用戶無法直接調整PRI的值。既然我們用戶無權干涉PRI,如果我想要調整進程的優先執行順序時,就要透過Nice值了。PRI與NI的相關性:
PRI(new)=PRI(old) + nice
不過,雖然nice值是可以影響PRI,不過,最終的PRI仍是要經過系統分析后才會決定的。另外,nice值是有正負的,當nice值為負值時,該進程就會降低PRI值,其對應的進程會優先被處理。
注意事項:
- nice值可以調整的范圍為-20-19
- root 可隨意調整自己或他人進程的Nice值,且范圍為-20-19
- 一般使用者僅可調整自己進程的Nice值,且范圍僅為0-19(避免一般用戶搶占系統資源)
- 一般使用者僅可將nice值越調越高
2.2 調整程序執行順序的 nice
和 renice
2.2.1 新執行的指令即給予新的nice值 nice
工作模式:nice[-n 數字] command
-
-n
:后面接一個數值,數值的范圍-20-19
來看看鳥哥的例子,加深理解
nice 為新執行的 vim 給予新的nice值
2.2.2 已存在進程的nice重新調整 renice
工作模式:renice [number] PID
-
PID :就是需要調整nice值的進程的ID呀~
同樣拿鳥哥的例子理解
renice 重新調整已經存在進程的nice
聰明的你有米有注意到,我們修改了自己bash PID的 nice,而bash所觸發的ps指令當中的nice也會繼承為-5了。所以,整個nice值是可以在父進程-->子進程之間傳遞的。
postscript:
除了renice
可以調整已存在進程的nice,top
也是可以的,貓毛在上一篇Linux 之 進程管理 -- 進程觀察中以“小插曲”的形式介紹過了。(就是在top執行過程中使用r
按鍵指令)