Unix / Linux - 處理序管理
Hello, 有志的程式設計師們!今天,我們將踏上一段令人興奮的旅程,探索Unix/Linux處理序的世界。作為你們友善的鄰居計算機科學老師,我很高興能夠指導你們這個基本概念。別擔心你們對編程還是新手——我們會從基礎開始,逐步學習。那麼,來一杯咖啡(或者如果你喜歡,來一杯茶),我們一起來深入探討吧!
什麼是處理序?
在我們開始之前,讓我們先來了解處理序到底是什麼。想像你在一個繁忙的廚房裡。每位正在烹飪特定菜肴的廚師都可以被視為一個處理序。他們有自己的原料(資源)、食譜(程式)和目標(輸出)。在計算機世界中,處理序簡單來說就是正在執行的程式。
開始一個處理序
在Unix/Linux中啟動一個處理序簡單得像派一樣!你可以用兩種主要方式來做到:
- 前台處理序:輸入命令,然後按Enter。
- 後台處理序:在命令的末尾加上一個與號(&)。
讓我們來看一些例子:
# 前台處理序
$ ls -l
# 後台處理序
$ long_running_command &
在第一個例子中,ls -l
在前台運行,顯示你目錄的內容。在第二個例子中,命令在後台運行,讓你可以繼續使用終端。
列出運行的處理序
現在,如果你想要看到在你系統(廚房)中工作的所有廚師(處理序),ps
命令就派上用場了!
$ ps aux
這個命令將顯示所有運行的處理序。這就像是在你的廚房的每個角落窺探!
以下是你會看到的內容:
欄位 | 描述 |
---|---|
USER | 處理序的所有者 |
PID | 處理序ID |
%CPU | CPU使用率 |
%MEM | 記憶體使用率 |
VSZ | 虛擬記憶體大小 |
RSS | 居住集合大小 |
TTY | 終端類型 |
STAT | 處理序狀態 |
START | 開始時間 |
TIME | CPU時間 |
COMMAND | 命令名稱 |
停止處理序
有時候,一個處理序可能會失控(就像一個燒毀一切的廚師)。在這種情況下,你需要停止它。這樣做:
$ kill PID
將PID替換为你想要終止的處理序ID。如果你覺得特別無情,你可以使用:
$ kill -9 PID
這就像當場解雇那位廚師——它是強制終止!
親本和子處理序
在Unix/Linux中,處理序有一個家族樹。當一個處理序創建另一個處理序時,它成為父親,而新的處理序是它的子。這就像一個主廚(父親處理序)分配任務給副廚(子處理序)。
你可以使用以下命令來看到這種關係:
$ pstree
這個命令顯示處理序樹,展示了親本-子關係。
開僵屍和孤兒處理序
現在,讓我們來談論一些特殊的處理序類型:
-
開僵屍處理序:一個已經完成執行但仍在處理序表中保留入口的子處理序。這就像一個完成菜肴但還沒有打卡下班的廚師。
-
孤兒處理序:一個父親已經完成或終止,但它仍在運行的處理序。想像一個副廚在主廚回家後仍在工作。
要查看你是否有任何開僵屍處理序,你可以使用:
$ ps aux | grep Z
守護進程
守護進程就像廚房中24小時工作的員工。它們在後台運行,提供各種服務。例如,sshd
守護進程聽取進入的SSH連接。
要列出所有守護進程,你可以使用:
$ ps -eo 'tty,pid,comm' | grep ^?
top命令
top
命令是你的全方位廚房監控器。它提供了運行系統的動態實時視圖。這樣使用它:
$ top
你會看到與ps
相似的表格,但它會實時更新。這就像是你廚房的實時直播!
工作ID與處理序ID
最後,讓我們來澄清工作ID和處理序ID之間的差別:
- 處理序ID (PID):系統中每個處理序的唯一標識符。
- 工作ID:分配給在後台啟動的處理序的數字。
你可以使用以下命令來查看工作ID:
$ jobs
你可以將後台工作帶到前台,使用:
$ fg %job_id
記住,工作ID是特定於你當前的shell會話,而PID是系統範圍內的。
這就是它,各位!我們已經涵蓋了Unix/Linux處理序管理的基本知識。記住,熟能生巧,所以不要猶豫在你的系統上嘗試這些命令。只是在使用kill
命令時要小心——我們不希望在廚房中有任何意外的終止!
當我們結束時,我想起了一件在我教學初期發生的有趣事件。有一次,我在演示kill
命令時意外地終止了我的文本編輯器進程,丟失了一個小時未保存的工作。讓這個教訓告訴我們——在玩弄進程之前,一定要保存你的工作!
繼續烹飪那些進程,並且快樂編程!
Credits: Image by storyset