Mac程序檢查器,就內建在你的活動監視工具裡。
按一下任何程序,它的面板就會顯示:它所屬的App、程式碼簽署和團隊ID、它的授權、父程序和Launch Agent、完整的指令列,以及它自啟動以來用掉的CPU時間、記憶體、打開的檔案和監聽連接埠。App還會加上版本、套件ID和Info.plist。可以儲存為CSV,或在「終端機」中用vitals process取得同樣的內容。
- 版本
- 156.0.8078.74
- 套件ID
- com.google.Chrome
- 架構
- 通用 · x86_64 · arm64
- 簽署
- Google LLC · 團隊ID EQHXZ8M8AV
- 保護
- 強化執行環境未沙箱化
- 使用者
- me
- 已執行
- 6h 14m
- 位置
- /Applications/Google Chrome.app
- 版本
- 2.15
- 套件ID
- com.apple.Terminal
- 架構
- Apple 晶片 · arm64e
- 簽署
- Apple
- 保護
- 無強化執行環境未沙箱化
- 使用者
- me
- 已執行
- 2d 6h
- 位置
- /System/Applications/Utilities/Terminal.app
- 版本
- 4.88.1
- 套件ID
- com.docker.docker
- 架構
- Apple 晶片 · arm64
- 簽署
- Docker Inc · 團隊ID 9BNSXJN65R
- 保護
- 強化執行環境未沙箱化
- 使用者
- me
- 已執行
- 3d 1h
- 位置
- /Applications/Docker.app
- 程序ID
- 48190
- 父程序
- launchd (1)
- 已執行
- 6h 14m
- 套件ID
- com.google.Chrome
- 版本
- 156.0.8078.74
- 架構
- 通用 · x86_64 · arm64
- 簽署
- Google LLC · 團隊ID EQHXZ8M8AV
- 強化執行環境
- 是
- 沙箱
- 否
- 授權
- 1
- CPU時間
- 42m 10s 使用者 32m 54s · 78%系統 9m 16s · 22%
- 記憶體
- 412 MB · 峰值 672 MB 的 61%
- 執行緒
- 64
- 打開的檔案
- 318
- 程序ID
- 48211
- 父程序
- Google Chrome (48190)
- 啟動者
- Google Chrome (48190)
- 已執行
- 6h 12m
- 版本
- 156.0.8078.74
- 架構
- 通用 · x86_64 · arm64
- 參數
- --type=renderer --lang=en-US --num-raster-threads=4 --enable-zero-copy
- 簽署
- Google LLC · 團隊ID EQHXZ8M8AV
- 強化執行環境
- 是
- 沙箱
- 否
- 授權
- 1
- CPU時間
- 12m 40s 使用者 10m 23s · 82%系統 2m 17s · 18%
- 記憶體
- 1.92 GB · 峰值 2.18 GB 的 88%
- 執行緒
- 23
- 打開的檔案
- 96
- 程序ID
- 48193
- 父程序
- Google Chrome (48190)
- 啟動者
- Google Chrome (48190)
- 已執行
- 6h 14m
- 版本
- 156.0.8078.74
- 架構
- 通用 · x86_64 · arm64
- 參數
- --type=gpu-process --lang=en-US --gpu-preferences=UAAAAAAAAADgAAAEAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAA
- 簽署
- Google LLC · 團隊ID EQHXZ8M8AV
- 強化執行環境
- 是
- 沙箱
- 否
- 授權
- 1
- CPU時間
- 18m 2s 使用者 12m 37s · 70%系統 5m 25s · 30%
- GPU
- 3%
- 記憶體
- 842 MB · 峰值 904 MB 的 93%
- 執行緒
- 31
- 打開的檔案
- 142
- 程序ID
- 48377
- 父程序
- Google Chrome (48190)
- 啟動者
- Google Chrome (48190)
- 已執行
- 3h 40m
- 版本
- 156.0.8078.74
- 架構
- 通用 · x86_64 · arm64
- 參數
- --type=renderer --lang=en-US --num-raster-threads=4 --enable-zero-copy
- 簽署
- Google LLC · 團隊ID EQHXZ8M8AV
- 強化執行環境
- 是
- 沙箱
- 否
- 授權
- 1
- CPU時間
- 4m 51s 使用者 4m 2s · 83%系統 49s · 17%
- 記憶體
- 1.31 GB · 峰值 1.36 GB 的 96%
- 執行緒
- 21
- 打開的檔案
- 88
- 程序ID
- 581
- 父程序
- launchd (1)
- 已執行
- 2d 6h
- 套件ID
- com.apple.Terminal
- 版本
- 2.15
- 架構
- Apple 晶片 · arm64e
- 簽署
- Apple
- 強化執行環境
- 否
- 沙箱
- 否
- 授權
- 6
- CPU時間
- 3m 12s 使用者 2m 2s · 64%系統 1m 10s · 36%
- 記憶體
- 148 MB · 峰值 208 MB 的 71%
- 執行緒
- 12
- 打開的檔案
- 58
- 程序ID
- 60120
- 父程序
- login (60118)
- 啟動者
- 終端機 (581)
- 已執行
- 2d 5h
- 架構
- Apple 晶片 · arm64e
- 參數
- -zsh
- 簽署
- Apple
- 強化執行環境
- 否
- 沙箱
- 否
- CPU時間
- 1.2s 使用者 0.7s · 58%系統 0.5s · 42%
- 記憶體
- 12 MB · 峰值 20 MB 的 60%
- 執行緒
- 1
- 打開的檔案
- 8
- 程序ID
- 60412
- 父程序
- zsh (60120)
- 啟動者
- 終端機 (581)
- 已執行
- 2d 4h
- 架構
- Apple 晶片 · arm64
- 參數
- node_modules/.bin/next dev --port 3000
- 簽署
- Node.js Foundation · 團隊ID HX7739G8FX
- 強化執行環境
- 是
- 沙箱
- 否
- CPU時間
- 1h 52m 使用者 1h 42m · 91%系統 10m 5s · 9%
- 記憶體
- 486 MB · 峰值 797 MB 的 61%
- 執行緒
- 19
- 打開的檔案
- 203
- 監聽連接埠
- 3000
- 程序ID
- 60533
- 父程序
- zsh (60120)
- 啟動者
- 終端機 (581)
- 已執行
- 14s
- 架構
- Apple 晶片 · arm64
- 參數
- node_modules/.bin/vitest run --coverage
- 簽署
- Node.js Foundation · 團隊ID HX7739G8FX
- 強化執行環境
- 是
- 沙箱
- 否
- CPU時間
- 9.1s 使用者 8.0s · 88%系統 1.1s · 12%
- 記憶體
- 391 MB · 峰值 391 MB 的 100%
- 執行緒
- 27
- 打開的檔案
- 412
- 程序ID
- 20288
- 父程序
- launchd (1)
- 已執行
- 3d 1h
- 套件ID
- com.docker.docker
- 版本
- 4.88.1
- 架構
- Apple 晶片 · arm64
- 簽署
- Docker Inc · 團隊ID 9BNSXJN65R
- 強化執行環境
- 是
- 沙箱
- 否
- 授權
- 7
- CPU時間
- 6m 4s 使用者 4m 31s · 74%系統 1m 33s · 26%
- 記憶體
- 112 MB · 峰值 233 MB 的 48%
- 執行緒
- 22
- 打開的檔案
- 74
- 程序ID
- 20311
- 父程序
- Docker (20288)
- 啟動者
- Docker (20288)
- 已執行
- 3d 1h
- 版本
- 4.88.1
- 架構
- Apple 晶片 · arm64
- 參數
- -watchdog -max-restarts 5
- 簽署
- Docker Inc · 團隊ID 9BNSXJN65R
- 強化執行環境
- 是
- 沙箱
- 否
- 授權
- 7
- CPU時間
- 3h 8m 使用者 2h 0m · 64%系統 1h 8m · 36%
- 記憶體
- 1.57 GB · 峰值 2.04 GB 的 77%
- 執行緒
- 48
- 打開的檔案
- 241
- 程序ID
- 20340
- 父程序
- com.docker.backend (20311)
- 啟動者
- Docker (20288)
- 已執行
- 12s
- 版本
- 4.88.1
- 架構
- Apple 晶片 · arm64
- 簽署
- Docker Inc · 團隊ID 9BNSXJN65R
- 強化執行環境
- 是
- 沙箱
- 否
- 授權
- 1
- CPU時間
- 2.0s 使用者 1.6s · 80%系統 0.4s · 20%
- 記憶體
- 64 MB · 峰值 64 MB 的 100%
- 執行緒
- 9
- 打開的檔案
- 31
- 程序ID
- 20318
- 父程序
- com.docker.backend (20311)
- 啟動者
- Docker (20288)
- 已執行
- 3d 1h
- 版本
- 4.88.1
- 架構
- Apple 晶片 · arm64
- 簽署
- Docker Inc · 團隊ID 9BNSXJN65R
- 強化執行環境
- 是
- 沙箱
- 否
- 授權
- 3
- CPU時間
- 1h 4m 使用者 31m 12s · 49%系統 32m 48s · 51%
- 記憶體
- 38 MB · 峰值 52 MB 的 73%
- 執行緒
- 14
- 打開的檔案
- 46
這些數字是模擬的:網頁讀不到你的Mac,也不應該讀到。
程序背後的App、它的程式碼簽署和授權。
面板先顯示程序所屬的App和它是哪種程序:瀏覽器標籤頁、擴充功能、GPU程序、開發伺服器。然後是它的程式碼簽署,包括開發者名稱和團隊ID、它是否使用強化執行環境和沙箱、它擁有的每項授權,以及它是為Apple 晶片、Intel還是兩者建置的、是否正透過Rosetta執行。
- 它所屬的App,以及它是標籤頁、擴充功能還是輔助程式
- 程式碼簽署,帶團隊ID;Apple自己的顯示Apple
- 強化執行環境、沙箱,以及每一項授權
- 為Apple 晶片、Intel或兩者建置,以及是否由Rosetta執行
父程序、Launch Agent和完整的指令列。
每個程序都有父程序,Vitals會指出它,以及啟動它的App;對於背景程序,還會指出在登入時透過launchd啟動它的Launch Agent或Launch Daemon。完整的指令列能讓一個光禿禿的node或python現出原形:原來是你熟悉的某個專案的開發伺服器。下方是它啟動的子程序,按一下就能看到。
- 父程序和啟動它的App,各是一個連結
- 在登入時啟動它的Launch Agent或Launch Daemon
- 完整的指令列,以及打開後可見的環境
- 子程序,各有自己的數據
自啟動以來的CPU時間、記憶體峰值、打開的檔案和監聽連接埠。
百分比說的是這一秒。面板涵蓋程序的整個生命週期:自啟動以來的CPU時間,分為它自己的工作和系統核心替它做的工作;目前記憶體與它曾占用的最高值之比;執行緒、打開的檔案、分頁移入量、讀取和寫入的Byte數、它正在監聽的連接埠,面板打開時還有CPU和記憶體的即時圖表。
- CPU時間,分為使用者和系統
- 目前記憶體,占歷史峰值的比例
- 執行緒、打開的檔案、分頁移入量、磁碟讀取和寫入
- 監聽連接埠,以及面板打開期間的即時圖表
App的版本、套件ID和Info.plist,以及它底下的每個程序。
打開一個App,它的「詳細資訊」卡片會給出版本、套件ID、位置、程式碼簽署和由什麼啟動,按一下就能看到完整的Info.plist。它的程序列在下方,每個按一下就能看到詳細資訊。剛啟動的程序帶有「新」標記,最近十分鐘內結束的程序仍留在列表中,所以一次當機或來了又走的輔助程式不會遺失。
- 版本、套件ID和完整的Info.plist
- 每個程序,剛啟動的帶有「新」標記
- 「最近結束」:最近十分鐘內關閉了什麼
- 選擇表格的直欄,並用
/a regex/過濾
將程序輸出為CSV,或在「終端機」中執行vitals process。
每個面板都有輸出選單:「拷貝為文字」用於訊息或錯誤回報,「儲存為CSV」用於試算表,都包含Info.plist和授權。在「終端機」中,vitals process依名稱或PID傳回任何程序的同樣內容,AI助理則透過MCP的process_details工具取得。
- 拷貝為文字,或儲存為CSV
vitals process node,或依PID,加--json供腳本使用--env加上環境,--plist加上Info.plist- 透過MCP給Claude、Codex和Cursor的
process_details工具
程序檢查器:之前與之後
活動監視器的「檢閱」視窗給出程序的父程序、使用者、CPU時間、記憶體、打開的檔案和連接埠,以及取樣。它不會說誰簽署、一個光禿禿的node屬於哪個App、登入時由什麼啟動,或完整的指令列是什麼。要查這些,你得打開「終端機」:codesign查簽署,ps查引數,launchctl查由什麼啟動,lsof查連接埠,plutil查Info.plist。
問題通常比這簡單。這是什麼?一個叫Helper的程序,一個沒人記得啟動過的python,一個名字像com.apple.something、用掉半個核心的東西。它是我安裝的App的一部分嗎,是Apple的嗎,它應該在執行嗎?
Vitals在一個面板裡回答:程序所屬的App和它是哪種程序,它的程式碼簽署和授權,它的父程序和指令列,它啟動的程序,以及它自啟動以來用掉的CPU時間、記憶體、檔案和連接埠,版本、Info.plist和授權摺疊在下方。同樣的答案也以CSV、「終端機」中的vitals process,以及AI助理的工具形式提供。
在Vitals中的位置
標籤頁、選單列項目和設定,依你會用到的順序排列。
- 01
按一下任何程序打開它的面板
在任何標籤頁中,按一下一個App,再按一下它的一個程序,或在App的面板中將游標移到某個程序上並按一下ⓘ。面板就會打開到它。⌘F依名稱尋找程序,
/a pattern/用規則運算式搜尋。 - 02
逐一閱讀面板的各個部分
「身分」,然後是「App」或「可執行檔」、「安全性」、「資源使用情況」、「磁碟」、「網路」和「子程序」。Info.plist、「授權」和「環境」摺疊起來,直到你打開它們。父程序、啟動者和每個子程序都是連結:按一下就跳過去。
- 03
選擇程序表格的直欄
工具列中的「直欄」按鈕新增或移除標籤頁的直欄:PID、使用者、路徑、版本、啟動時間、閒置喚醒和各項讀數。每個標籤頁保留自己的選擇。
- 04
拷貝、儲存為CSV,或在「終端機」中查詢
面板標題中的分享按鈕提供「拷貝為文字」和「儲存為CSV」。在「終端機」中,
vitals process <name>或vitals process <pid>,加--json、--env或--plist。透過MCP,則是process_details工具。
codesignvitals process --json背後的詞彙
這些數字代表什麼,摘自活動監視器詞彙表。
- PID
PID即程序ID,是macOS指定給每個執行中程序、用來識別它的數字。
- launchd
launchd是macOS開機時啟動的第一個程序,程序ID為1。
- 輔助程序
輔助程序是App為了完成部分工作而啟動的獨立程序,例如算繪網頁、執行擴充功能或處理圖形。
- 執行緒
執行緒是程序內部一條獨立的執行路徑,一個程序可以在不同的CPU核心上同時執行多個執行緒。
- 監聽連接埠
監聽連接埠是某個程序等待連入連線的網路連接埠,例如在連接埠3000上執行的網頁伺服器。
- WindowServer
WindowServer是macOS的系統程序,負責管理視窗,把各個App繪製的內容合成為顯示器上的最終畫面,並把按一下、按鍵等輸入事件傳送給對應的App。
- 取樣程序
「取樣程序」是活動監視器中的工具,會在幾秒鐘內記錄所選程序正在做什麼,並產生一份文字報告,說明它的執行緒把時間花在哪裡。
- 強制結束
「強制結束」會立即結束App或程序,不讓它儲存或清理。
問題
購買前,大家對程序檢查器最常問的問題。
如何打開程序檢查器?
在任何列表中按一下一個程序,它的面板就會打開。在App的面板中,每個程序是一列:按一下它,或按一下游標移過去時出現在它旁邊的ⓘ。按⌘F依名稱尋找程序,輸入/a pattern/可用規則運算式搜尋。
程序的程式碼簽署能告訴我什麼?
誰建置了這段程式碼。帶團隊ID的名稱是Apple已識別的開發者,例如Google LLC或Docker Inc。Apple自己的程序顯示Apple。「已簽署,無憑證」是在Mac上建置、沒有特定簽署者的工具,這對Homebrew和你自己編譯的東西來說很正常。「未簽署」表示完全沒有簽署。下方是:它是否使用強化執行環境、是否在沙箱中執行,以及它被授予的每一項授權。
Vitals能告訴我某個程序是否安全,或者是不是惡意軟體嗎?
它給你判斷所需的事實:程式碼簽署、父程序、它在哪裡,以及它在做什麼。有團隊ID的知名開發者、沙箱,以及你認得的父程序,就是你希望看到的。沒有簽署、路徑在隱藏的檔案夾裡、還有一個你從未安裝過的Launch Agent,就值得仔細看看。Vitals不會掃描惡意軟體;它告訴你那裡有什麼。
什麼是CPU時間,為什麼分為使用者和系統?
CPU時間是程序自啟動以來讓一個CPU核心保持忙碌的時間,累計計算:一個程序以單核50%執行兩小時,就用了一小時。使用者時間是程序自己的工作;系統時間是系統核心替它做的工作,例如讀取檔案或連上網路。一個做得不多卻系統時間占比很高的程序,通常表示它在忙著向macOS要東西。
為什麼有些程序顯示的詳細資訊比其他程序少?
macOS只向程序所屬的使用者顯示它的指令列、環境和累計總量。屬於macOS或其他帳號的程序會把這些留給自己;它的身分、簽署和數據仍會顯示,數據透過Vitals的選用輔助程式取得。在「設定」→「一般」中開啟「完整系統指標」即可取得。
它會顯示WindowServer和kernel_task這類macOS程序嗎?
會。它們的App是macOS,簽署是Apple的,父程序是launchd。開啟輔助程式後,它們的CPU和記憶體也會顯示,面板的圖表在打開期間持續執行。
我能看到程序的環境變數嗎?
能,在面板末尾的「環境」部分,摺疊起來直到你打開它,也能在「終端機」中用vitals process --env查看。它們絕不會傳給AI助理,因為環境裡常常有金鑰。
程序結束後,Vitals會保留它多久?
十分鐘,在App的面板中,帶有它的名稱、啟動和結束時間,以及它占用的記憶體。所以當機的輔助程式,或你不在時完成的建置,仍然看得到。
我能在「終端機」中或從AI助理取得程序的詳細資訊嗎?
有。vitals process node或vitals process 60412給出同樣的詳細資訊,以文字顯示,或加--json供腳本使用;--env加上環境,--plist加上App的Info.plist。Claude、Codex或Cursor這類助理透過Vitals MCP伺服器的process_details工具取得,需要時也包括Info.plist。
它能為程序取樣或產生Spindump嗎?
不能。那是活動監視器的功能,Vitals不照搬。Vitals回答的是程序是什麼,附上它的程式碼簽署、父程序和資源用量;要看停止回應的App的堆疊追蹤,請打開活動監視器並按「取樣」。
繼續閱讀
用到它的指南,以及Vitals和大家為此購買的App比起來如何。