這裡介紹如何在 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 指令

pgrepgrep 很類似,可以用關鍵字篩選目前正在執行的行程,例如:

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