如何管理 Linux 進程
我們都遵循某些流程來實現我們的目標,類似的是,每個系統都有自己的進程來完成任務。
在 Linux 系統中執行的每個程序或命令都被稱爲一個進程。
在本教程中,讓我們來探討進程以及我們如何在 Linux 中管理它們。
什麼是 Linux 進程
理論上,一個進程被稱爲一個正在執行的程序,就是一個系統目前正在進行的任務。
你在系統上的每一個動作都會導致一個新的進程。例如,打開一個瀏覽器就會啓動一個進程。
簡單地說,一個進程是一個程序的實例。用戶的操作被轉化爲一個命令,在執行該命令時將會創建一個新的進程。
進程按照父 - 子層次結構工作。正如層次結構的名稱所表示的那樣,由命令 / 程序啓動的進程被稱爲父進程,父進程產生的進程被稱爲子進程。
Linux 進程的類型
在 Linux 發行版中,進程被分爲兩種類型:
-
前臺進程
-
後臺進程
前臺進程
一個需要用戶使用終端命令或程序來啓動的進程被稱爲前臺進程。這意味着前臺進程需要一個來自用戶的輸入觸發。所以每個前臺進程都是手動觸發的。
每當一個進程在前臺運行時,其他進程應該等待,直到當前進程完成。
證明這一點的最好例子是通過 sleep
命令。sleep
命令不允許用戶與終端互動,直到達到給定的時間。
sleep 10
終端命令在前臺延遲 10 秒
sleep 終端命令在前臺運行並暫停用戶輸入
我們應該等待 10 秒鐘,以訪問終端運行另一個命令。
後臺進程
一個獨立於用戶輸入運行的進程被稱爲後臺進程。與前臺進程不同,我們可以在一個後臺進程中同時運行多個進程。
要在後臺運行一個進程,在你用來啓動該進程的命令的結尾處放一個安培號(&)。
這裏有一個例子:
讓我們在一個後臺進程中執行 sleep
命令。它將在後臺運行,並將終端還給我們以運行其他命令。
後臺進程的終端命令示例
sleep 10 &
終端命令在後臺延遲 10 秒
現在我們可以看到,上述命令在後臺運行。它創建了一個 PID
19003 的進程。所以我們可以同時運行另一條命令(pwd
命令)。
如何將一個前臺進程改爲後臺進程
如果我們在前臺啓動一個進程並想把它放到後臺,我們可以用 bg
命令來實現。讓我們看看如何將前臺進程改爲後臺。
如果一個進程正在運行,按 CTRL+Z
鍵。這個命令將暫停當前進程。
前臺進程輸出
然後運行 bg
命令。它接受一個進程 ID 作爲參數,並將該進程放入後臺。如果參數爲空,它將把當前暫停的進程放入後臺。
bg <process_id>
將進程移至後臺的命令
bg
將上一個進程移到後臺的命令
前臺進程向後臺進程輸出
我們可以看到暫停的命令(sudo apt update
)在後臺恢復了。
如何列出 Linux 進程
在我們介紹如何做到這一點之前,你應該知道爲什麼你可能需要知道一個進程的列表。這裏有幾個原因:
-
要知道哪個進程消耗的時間更多
-
要知道哪個進程佔用更多的內存和 CPU
-
要知道一個正在運行的進程所觸發的命令
要查看當前正在運行的進程,我們可以使用 ps
(Process Status 進程狀態)命令:
ps
列出正在運行的進程的終端命令
ps 命令展示正在運行的進程的列表
要列出每個登錄用戶的所有進程的摘要,我們可以使用 w
命令。這個命令是 Linux 中 who
、uptime
和 ps -a
命令的結合。
w
列出所有登錄用戶的進程的終端命令
w 命令顯示所有用戶的進程列表
如何以樹狀視圖列出進程
當一個程序 / 命令運行時,它啓動了一個被稱爲 “父進程” 的主進程。父進程可能依賴於其他一些命令 / 程序,這將創建一個子進程。
下面的截圖是一個例子。
父進程(firefox)的子進程
在上面的截圖中,Firefox 是父進程,其他進程是其子進程。
讓我們來探討一下如何以樹狀結構列出進程。
pstree
是一個 Linux 命令,用於以樹狀結構列出所有用戶的當前運行進程。它被用作 ps
命令的一個更直觀的替代。
pstree
將進程以樹狀結構列出的終端命令
pstree 命令以樹狀結構列出所有進程
我們可以看到,正在運行的進程是以樹狀形式顯示的。這對於可視化進程是很有用的。
在命令中添加 -p
標誌將顯示每個分支和其進程 ID。
pstree -p
以樹狀結構顯示一個父進程的子進程的終端命令
終端命令以樹狀視圖顯示帶有 PID 的進程列表
要列出一個特定進程的子進程,請將進程 ID 作爲參數傳給 pstree
命令。
pstree 3149
列出進程 id 3149 的進程的終端命令
將某一進程羅列爲樹狀視圖
在上文中,我提到 pstree
命令列出了所有用戶的進程。在 pstree
命令中傳遞用戶名,只列出該用戶運行的進程。
pstree root
以樹狀視圖列出特定用戶的進程
上面的截圖顯示了由 root
用戶運行的進程。
如何查看某個程序的進程
很多開發者可能都遇到過以下情況:
在進行 web 開發項目時,我們使用 Chrome、Firefox 等不同的瀏覽器來驗證輸出。
有些開發者會不斷地打開標籤,而從不關閉已打開的標籤。由於負載過重(如果打開了 150 多個標籤),瀏覽器有時會沒有反應😣導致系統掛起。最糟糕的是,我們將無法關閉瀏覽器😂。
與 Windows 不同,我們在 Linux 中沒有任務管理器來殺死瀏覽器。
這個問題在 Linux 中也可以輕鬆解決。讓我們看看一個 Linux 專家是如何處理這種情況的。
我們知道,每個程序(包括瀏覽器)都是作爲一個進程運行的。所以,你只需要找到進程的 ID,然後關掉它。
讓我們看看如何找到你需要的一個命令 / 程序的進程 ID。
在我的系統中,Chrome 正在運行,現在我們可以通過運行以下命令得到 Chrome 的 PID:
pidof chrome
查找進程 ID 的終端命令
查找 Chrome 進程 ID 的終端命令
如何殺死一個進程
在 Linux 中,有一個叫作 kill
的命令,通過傳遞 PID(進程 ID)或進程名稱來殺死任何進程。
下面是 kill
命令的語法:
kill <pid/processname>
kill 命令的語法
讓我們存儲 Chrome 的 PID,並使用 kill
命令殺死它:
a=$(pidof chrome)
kill $a
殺死一個進程的命令
殺死一個進程的終端命令
上述命令將殺死 Chrome web 瀏覽器。
如何列出所有進程
我們可以使用 top
命令查看所有的 Linux 進程。它爲所有用戶顯示每個進程的實時更新。
top
實時列出所有進程的命令
實時顯示所有進程的終端命令
讓我們瞭解一下標題,以理解下方的數據。
-
PID 代表一個唯一的進程 ID
-
USER 代表任務所有者的用戶名
-
PR 代表該進程的優先級,數字越小,優先級越高
-
NI 代表任務的優先級,一個負的 Nice 值意味着更高的優先級,一個正的 Nice 值意味着更低的優先級
-
VIRT 代表任務使用的總虛擬內存
-
RES 代表一個進程的 RAM 使用量,以千字節爲單位
-
SHR 代表一個進程使用的共享內存大小(Kb)
-
S 代表進程的狀態:
-
D:不間斷的睡眠
-
R:運行
-
S:睡眠
-
T:追蹤(已停止)
-
Z:殭屍
-
CPU 代表 CPU 使用率
-
MEM 代表任務的內存使用量
-
TIME 代表 CPU 時間
-
COMMAND 代表用於啓動進程的命令
要顯示特定的用戶進程,我們應該使用標誌 -u
:
top -u <username>
列出特定用戶進程的終端命令語法
要查看由用戶 gogosoon
運行的進程,請運行以下命令:
top -u gogosoon
列出由用戶 gogosoon
啓動的進程的終端命令
由用戶 gogosoon 啓動的進程的終端輸出
你可能對命令行的輸出感到困惑 😆。這對實時調試進程來說有點困難。
這裏有一個方便的 GUI 工具來處理 Linux 中的進程。但我們必須手動安裝這個工具。這將更像 Windows 中的任務管理器。
sudo apt install gnome-system-monitor
安裝系統監控應用程序的終端命令
安裝後,只需在終端輸入軟件的名稱:
gnome-system-monitor
在 GUI 中打開進程列表的命令
這將在一個新的窗口中打開所有的進程,並有一個不錯的 GUI:
Gnome 系統監控
當我們右鍵點擊任何進程時,它將顯示諸如殺死、停止、結束等操作。
資源選項卡顯示以下工具:
-
CPU 歷史
-
內存和交換歷史
-
網絡歷史
CPU 歷史記錄
內存和交換歷史記錄
網絡歷史記錄
這些圖表對確定你的系統中的負載很有用。
總結
在這篇文章中,你已經瞭解了 Linux 中進程的基本知識。我希望你現在能更好地理解它們是如何工作的。我建議你在你的系統中嘗試這些命令。
要了解更多關於 Linux 的信息,請在我的網站上訂閱我的電子郵件通訊,並在社交媒體上關注我。
原文鏈接:https://www.freecodecamp.org/news/how-to-manage-linux-processes/
作者:Arunachalam B
譯者:Chengjun.L
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/4HEJPAPBQdQCjKJfDfMG9w