如何在 Linux 上使用 kill 和 killall 來管理程式
導讀 | 瞭解如何使用 ps、kill 和 killall 來終止程式並回收系統資源。 |
在 中,每個程式和守護程式daemon都是一個“程式process”。 大多數程式代表一個正在執行的程式。而另外一些程式可以派生出其他程式,比如說它會偵聽某些事件的發生,然後對其做出響應。並且每個程式都需要一定的記憶體和處理能力。你執行的程式越多,所需的記憶體和 CPU 使用週期就越多。在老式電腦(例如我使用了 7 年的膝上型電腦)或輕量級計算機(例如樹莓派)上,如果你關注過後臺執行的程式,就能充分利用你的系統。
你可以使用 ps 來檢視正在執行的程式。你通常會使用 ps 命令的引數來顯示出更多的輸出資訊。我喜歡使用 -e 引數來檢視每個正在執行的程式,以及 -f 引數來獲得每個程式的全部細節。以下是一些例子:
$ ps PID TTY TIME CMD 88000 pts/0 00:00:00 bash 88052 pts/0 00:00:00 ps 88053 pts/0 00:00:00 head
$ ps -e | head PID TTY TIME CMD 1 ? 00:00:50 systemd 2 ? 00:00:00 kthreadd 3 ? 00:00:00 rcu_gp 4 ? 00:00:00 rcu_par_gp 6 ? 00:00:02 kworker/0:0H-events_highpri 9 ? 00:00:00 mm_percpu_wq 10 ? 00:00:01 ksoftirqd/0 11 ? 00:00:12 rcu_sched 12 ? 00:00:00 migration/0
$ ps -ef | head UID PID PPID C STIME TTY TIME CMD root 1 0 0 13:51 ? 00:00:50 /usr/lib/systemd/systemd --switched-root --system --deserialize 36 root 2 0 0 13:51 ? 00:00:00 [kthreadd] root 3 2 0 13:51 ? 00:00:00 [rcu_gp] root 4 2 0 13:51 ? 00:00:00 [rcu_par_gp] root 6 2 0 13:51 ? 00:00:02 [kworker/0:0H-kblockd] root 9 2 0 13:51 ? 00:00:00 [mm_percpu_wq] root 10 2 0 13:51 ? 00:00:01 [ksoftirqd/0] root 11 2 0 13:51 ? 00:00:12 [rcu_sched] root 12 2 0 13:51 ? 00:00:00 [migration/0]
最後的例子顯示最多的細節。在每一行,UID(使用者 ID)顯示了該程式的所有者。PID(程式 ID)代表每個程式的數字 ID,而 PPID(父程式 ID)表示其父程式的數字 ID。在任何 Unix 系統中,程式是從 1 開始編號,是核心啟動後執行的第一個程式。在這裡,systemd 是第一個程式,它催生了 kthreadd,而 kthreadd 還建立了其他程式,包括 rcu_gp、rcu_par_gp 等一系列程式。
系統會處理大多數後臺程式,所以你不需要操心這些程式。你只需要關注那些你所執行的應用建立的程式。雖然許多應用一次只執行一個程式(如音樂播放器、終端模擬器或遊戲等),但其他應用則可能建立後臺程式。其中一些應用可能當你退出後還在後臺執行,以便下次你使用的時候能快速啟動。
當我執行 Chromium(作為谷歌 Chrome 瀏覽器所基於的開源專案)時,程式管理便成了問題。 Chromium 在我的膝上型電腦上執行非常吃力,併產生了許多額外的程式。現在我僅開啟五個選項卡,就能看到這些 Chromium 程式:
$ ps -ef | fgrep chromium jhall 66221 [...] /usr/lib64/chromium-browser/chromium-browser [...] jhall 66230 [...] /usr/lib64/chromium-browser/chromium-browser [...] [...] jhall 66861 [...] /usr/lib64/chromium-browser/chromium-browser [...] jhall 67329 65132 0 15:45 pts/0 00:00:00 grep -F chromium
我已經省略一些行,其中有 20 個 Chromium 程式和一個正在搜尋 “chromium" 字元的 grep 程式。
$ ps -ef | fgrep chromium | wc -l 21
但是在我退出 Chromium 之後,這些程式仍舊執行。如何關閉它們並回收這些程式佔用的記憶體和 CPU 呢?
kill 命令能讓你終止一個程式。在最簡單的情況下,你告訴 kill 命令終止你想終止的程式的 PID。例如,要終止這些程式,我需要對 20 個 Chromium 程式 ID 都執行 kill 命令。一種方法是使用命令列獲取 Chromium 的 PID,而另一種方法針對該列表執行 kill:
$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}' 66221 66230 66239 66257 66262 66283 66284 66285 66324 66337 66360 66370 66386 66402 66503 66539 66595 66734 66848 66861 69702 $ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}' > /tmp/pids $ kill $(cat /tmp/pids)
最後兩行是關鍵。第一個命令列為 Chromium 瀏覽器生成一個程式 ID 列表。第二個命令列針對該程式 ID 列表執行 kill 命令。
一次終止多個程式有個更簡單方法,使用 killall 命令。你或許可以根據名稱猜測出,killall 會終止所有與該名字匹配的程式。這意味著我們可以使用此命令來停止所有流氓 Chromium 程式。這很簡單:
$ killall /usr/lib64/chromium-browser/chromium-browser
但是要小心使用 killall。該命令能夠終止與你所給出名稱相匹配的所有程式。這就是為什麼我喜歡先使用 ps -ef 命令來檢查我正在執行的程式,然後針對要停止的命令的準確路徑執行 killall。
你也可以使用 -i 或 --interactive 引數,來讓 killkill 在停止每個程式之前提示你。
killall 還支援使用 -o 或 --older-than 引數來查詢位元定時間更早的程式。例如,如果你發現了一組已經執行了好幾天的惡意程式,這將會很有幫助。又或是,你可以查詢位元定時間更晚的程式,例如你最近啟動的失控程式。使用 -y 或 --young-than 引數來查詢這些程式。
程式管理是系統維護重要的一部分。在我作為 Unix 和 Linux 系統管理員的早期職業生涯中,殺死非法作業的能力是保持系統正常執行的關鍵。在如今,你可能不需要親手在 Linux 上的終止流氓程式,但是知道 kill 和 killall 能夠在最終出現問題時為你提供幫助。
你也能尋找其他方式來管理程式。在我這個案例中,我並不需要在我退出瀏覽器後,使用 kill 或 killall 來終止後臺 Chromium 程式。在 Chromium 中有個簡單設定就可以進行控制:
不過,始終關注系統上正在執行哪些程式,並且在需要的時候進行干預是一個明智之舉。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2765238/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux kill,killall和killall5Linux
- Linux 下使用 killall 命令終止程式Linux
- Linux 下使用 killall 命令終止程式的 8 大用法Linux
- linux 檢視程式 kill程式Linux
- Linux基礎命令---殺死程式killallLinux
- 如何在 Linux 上使用 pkgsrcLinux
- 如何在 Linux 上建立和使用交換檔案Linux
- Linux基礎命令—killallLinux
- linux 下根據埠kill 程式Linux
- 如何在 Linux 上使用 GNU sedLinux
- 如何在 Linux 上安裝應用程式Linux
- Linux:程式模型和程式管理Linux模型
- 如何在 Ubuntu 和其他 Linux 發行版上使用 7ZipUbuntuLinux
- 如何在linux伺服器上使用hanlpLinux伺服器HanLP
- 如何在 Linux 上安裝 Elasticsearch 和 KibanaLinuxElasticsearch
- Linux:使用systemd管理程式Linux
- 【linux】kill命令模板Linux
- Linux系統上使用nvm管理nodejs和npm版本操作LinuxNodeJSNPM
- 如何在 Linux Shell 程式設計中定義和使用函式Linux程式設計函式
- 如何在 Ubuntu 和其他 Linux 上安裝 NetbeansUbuntuLinuxBean
- 在Linux中,如何在Linux中使用LXD進行容器管理?Linux
- 如何在 CentOS 8 上配置和管理防火牆CentOS防火牆
- 精通 Linux 的 “kill” 命令Linux
- linux命令大全-linux命令使用和管理Linux
- 如何在Chrome OS上安裝Linux應用程式ChromeLinux
- 如何在 Debian Linux 上設定和配置網橋Linux
- 使用pt-kill根據一定的規則來kill連線的方法
- 如何在 Ubuntu 中管理和使用邏輯卷管理 LVMUbuntuLVM
- 在Linux中,如何理解系統管理工具,如Webmin和Ajenti。LinuxWeb
- 如何在 Linux 中安裝和使用 duf 命令Linux
- 如何在Linux上安裝Intel微程式碼韌體LinuxIntel
- linux之kill命令詳解Linux
- 如何在 Linux 上使用 snap 安裝 Spotify(聲破天)Linux
- 如何在 Linux/Windows/MacOS 上使用 .NET 進行開發LinuxWindowsMac
- 如何在 Linux 上使用 dnf 命令安裝軟體包?Linux
- 如何在 Ubuntu 和其它 Linux 發行版上更新 grubUbuntuLinux
- 如何在Linux上檢視和配置密碼時效Linux密碼
- 如何在 Linux 中管理日誌Linux