PID
又稱:程序ID
簡短回答
PID即程序ID,是macOS指定給每個執行中程序、用來識別它的數字。執行中的程序不會共用同一個PID,但程序結束後,它的號碼可能會被重複使用。
活動監視器會用獨立的一欄顯示PID。kill、sample和lsof等「終端機」指令會用PID來確認你指的是哪個程序,因為好幾個程序可能同名。
在macOS上,PID 0是kernel_task,PID 1是launchd,也就是啟動系統其餘部分的第一個程序。你打開的App會拿到較大的號碼,而且每次啟動都會拿到新的PID。
如何找出App的PID
在活動監視器的列表中找到該App,查看「PID」欄。如果這一欄被隱藏了,請選擇「顯示方式」>「直欄」>「PID」。
在「終端機」中,pgrep -l Safari會列出符合的程序及其PID。ps -p <PID> -o pid,ppid,comm會顯示某個程序的名稱及其父程序的PID。
父程序PID能告訴你什麼
除了第一個程序之外,每個程序都有一個父程序,也就是啟動它的那個程序。在活動監視器中選擇「顯示方式」>「所有程序(依階層排列)」,就能以樹狀結構看到這些父子關係。
如何在「終端機」中找出PID
「終端機」中的程序名稱可能和App名稱不同。許多App會執行名稱類似「App Helper (Renderer)」的輔助程序,每個都有自己的PID。
- 從「應用程式」>「工具程式」打開「終端機」。
- 執行
pgrep -lx Finder,取得名稱剛好是Finder的程序PID。拿掉x,就能比對名稱的一部分。 - 如果一個App有多個程序,請執行
pgrep -lf "Google Chrome",以完整的指令列進行比對。 - 要查看你自己的shell的PID,請執行
echo $$。
如何找出某個PID屬於哪個App
錯誤訊息和記錄檔常常只提到PID而沒有名稱。要查出來,請執行ps -p <PID> -o pid,ppid,user,command。它會顯示程式的完整路徑、執行它的使用者,以及其父程序的PID。
在活動監視器中,按一下「PID」欄位標題依此排序,然後捲動到這個號碼。按兩下該程序打開它的資訊視窗,裡面也會顯示它的父程序。
如果ps沒有輸出任何內容,代表這個程序已經結束了。
拿到PID可以做什麼
先用ps -p <PID>確認名稱。PID會被重複使用,所以你先前拷貝的號碼現在可能屬於另一個程序。
kill <PID>要求程序結束。kill -9 <PID>立即終止它。sample <PID> 5記錄程序5秒內在做什麼。lsof -p <PID>列出它開啟的檔案和網路連線。lsof -a -p <PID> -d cwd顯示它執行時所在的檔案夾。top -pid <PID>顯示它即時的CPU和記憶體使用量。按q離開。
什麼時候該用PID而不是名稱
依名稱運作的指令,例如killall Safari或pkill Safari,會作用在所有符合的程序上。預設情況下,killall會傳送結束訊號給你擁有的所有符合程序,而pkill會比對名稱中包含你所輸入文字的任何程序。
對單一App來說這沒問題,但當很多程序同名時就有風險。一個瀏覽器可能執行數十個輔助程序,而好幾個node或python副本可能分屬不同的專案。PID只會指向一個確切的程序,所以當你只想停止其中一個、讓其餘的繼續執行時,就用PID。
如果一定要用名稱,請先預覽符合的結果。pgrep -l <name>會列出pkill將作用的程序,killall -d <name>會顯示killall將做什麼,但不會實際傳送任何訊號。
大家常問的問題
活動監視器中的PID是什麼意思?
PID代表程序ID。它是每個執行中程序獨有的號碼,用來區分各個程序,也用來在「終端機」指令中指定程序。
App的PID會一直不變嗎?
只在它執行期間不變。結束並重新打開App後,它就會拿到新的PID。
Mac上的PID 1是什麼?
PID 1是launchd,也就是在macOS上啟動並管理其他程序的程序。絕對不要結束它。
如何在Mac上依PID終止程序?
在「終端機」中執行kill <PID>。如果它不結束,kill -9 <PID>會立即終止它,但可能會遺失尚未儲存的資料。
兩個程序可以有相同的PID嗎?
不能同時存在。舊程序結束後,它的PID可以指定給新的程序。
活動監視器中的PID 0是什麼?
PID 0是kernel_task,代表macOS核心。它無法結束。
相關詞條
逐步教學:Claude Code使用太多記憶體。
從Windows轉過來的嗎? 請參閱Mac版工作管理員,或最好用的活動監視器替代方案。也可以瀏覽詞彙表中的所有詞條。