如何管理 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 進程

在我們介紹如何做到這一點之前,你應該知道爲什麼你可能需要知道一個進程的列表。這裏有幾個原因:

要查看當前正在運行的進程,我們可以使用 ps(Process Status 進程狀態)命令:

ps

列出正在運行的進程的終端命令

ps 命令展示正在運行的進程的列表

要列出每個登錄用戶的所有進程的摘要,我們可以使用 w 命令。這個命令是 Linux 中 whouptimeps -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

實時列出所有進程的命令

實時顯示所有進程的終端命令

讓我們瞭解一下標題,以理解下方的數據。

要顯示特定的用戶進程,我們應該使用標誌 -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 歷史記錄

內存和交換歷史記錄

網絡歷史記錄

這些圖表對確定你的系統中的負載很有用。

總結

在這篇文章中,你已經瞭解了 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