這裡介紹如何在 Linux 中以程式的名稱來搜尋正在執行的行程,列出各種行程資訊。
Linux 的系統管理者在監控與管理系統時,時常都會需要查看系統上有哪一些的程式在跑,是否有不正常的行為,必要時也要清除不正常的程式,讓系統運作更順暢。
ps
指令ps
指令可以列出詳細的系行程資訊,我們可以配合 grep
指令,篩選出寒有關鍵字的行程,例如找出所有 Firefox 連覽器的行程:
ps aux | grep firefox
如果指令名稱可能會包含大小寫的英文字母,可以加上 -i
參數,讓比對的時候不分大小寫:
ps aux | grep -i firefox
上面這種搭配 grep
的方式是比較直覺的作法,但是 grep
會對 ps
指令所有的輸出文字進行比對,如果要更精確的只針對指令名稱做比對,可以使用 ps
加上 -C
參數,例如列出所有 Chrome 瀏覽器的行程:
ps -C chrome
PID TTY TIME CMD 3569 ? 00:06:46 chrome 3581 ? 00:00:00 chrome 3586 ? 00:00:00 chrome
如果要列出更詳細的行程資訊,可再加上 -f
參數:
ps -fC chrome
UID PID PPID C STIME TTY TIME CMD gtwang 3569 1974 5 08:30 ? 00:06:52 /opt/google/chrome/chrome gtwang 3581 3569 0 08:30 ? 00:00:00 /opt/google/chrome/chrome --type=zygote gtwang 3586 3581 0 08:30 ? 00:00:00 /opt/google/chrome/chrome --type=zygote
ps
加上 -C
參數會非常精確的比對指令名稱,不含路徑以及後面的參數,所以要用這種方式的話,必須非常確定程式的名稱才行。
pidof
指令pidof
指令根據指定的程式名稱,列出所有正在執行的行程 ID:
pidof chrome
8547 8048 6672 5563 4151 3872 3854 3786 3745 3738 3652 3642 3586 3581 3569
也可以同時查詢多個程式名稱:
pidof chrome firefox
8547 8048 6672 5563 4151 3872 3854 3786 3745 3738 3652 3642 3586 3581 3569 10295 10242
如果要把查詢到的行程全部砍掉,可以直接將 pidof
的結果交給 kill
,這樣就可以一次中止所有指定的程式:
kill $(pidof chrome firefox)
pgrep
指令pgrep
跟 grep
很類似,可以用關鍵字篩選目前正在執行的行程,例如:
pgrep chrome
3569 3581 3586
若要針對特定使用者的行程進行篩選,可以使用 -u
指定使用者名稱:
pgrep -u gtwang chrome
這樣就會從 gtwang
使用者所執行的程式中,篩選出 Chrome 瀏覽器的行程 ID。
在使用 pgrep
篩選出行程 ID 之後,若想要看各個行程的詳細資料,可以直接將 PID 導向給 ps
指令,調出指定 PID 的詳細資料:
ps -fp $(pgrep -d, chrome)
-d,
的意思在於讓 pgrep
輸出 PID 時以逗點分隔,這樣才能符合 ps
指令要讀取的格式,串起來之後即可輸出我們要的詳細資料:
UID PID PPID C STIME TTY TIME CMD gtwang 3569 1974 5 08:30 ? 00:10:32 /opt/google/chrome/chrome gtwang 3581 3569 0 08:30 ? 00:00:00 /opt/google/chrome/chrome --type=zygote gtwang 3586 3581 0 08:30 ? 00:00:00 /opt/google/chrome/chrome --type=zygote
如果感覺系統被某些程式拖慢,除了砍掉太耗費資源的程式之外,也可以嘗試使用 renice
指令將程式的執行優先權降低。例如找出所有正在執行的 Chrome 瀏覽器行程,降低其執行優先權:
renice +4 $(pgrep chrome)
參考資料:nixCraft