A process inspector for your Mac, built into your activity monitor.

Click any process and its drawer shows the app it belongs to, its code signature and Team ID, its entitlements, its parent process and launch agent, its full command line, and the CPU time, memory, open files and listening ports it has used since it started. An app adds its version, bundle ID and Info.plist. Save it as CSV, or get the same from vitals process in Terminal.

Click a process on the left: its drawer opens on the right.
Google Chrome
96 processes
Memory
21.19 GB
CPU
14.2%
Power
4.1 W
GPU
3%
Disk
0 kB/s
Network
1.2 MB/s
Details
Version
156.0.8078.74
Bundle ID
com.google.Chrome
Architecture
Universal · x86_64 · arm64
Signature
Google LLC · Team ID EQHXZ8M8AV
Protection
Hardened RuntimeNot Sandboxed
User
me
Running For
6h 14m
Location
/Applications/Google Chrome.app
Info.plist44
Processes
Show All 96
Ended Recently2
Tab Process48402Ran 1h 12m · ended 3 min ago 318 MB
Google Chrome Helper (Plugin)48395Ran 26m 4s · ended 8 min ago 71 MB
Terminal
49 processes
Memory
3.81 GB
CPU
13.2%
Power
1.8 W
GPU
0%
Disk
2.1 MB/s
Network
0 kB/s
Details
Version
2.15
Bundle ID
com.apple.Terminal
Architecture
Apple silicon · arm64e
Signature
Apple
Protection
No Hardened RuntimeNot Sandboxed
User
me
Running For
2d 6h
Location
/System/Applications/Utilities/Terminal.app
Info.plist39
Processes
Ended Recently2
node60498Ran 2m 8s · ended 5 min ago 612 MB
git60502Ran 0.4s · ended 4 min ago 9 MB
Docker
9 processes
Memory
1.74 GB
CPU
2.4%
Power
0.9 W
GPU
0%
Disk
340 kB/s
Network
0 kB/s
Details
Version
4.88.1
Bundle ID
com.docker.docker
Architecture
Apple silicon · arm64
Signature
Docker Inc · Team ID 9BNSXJN65R
Protection
Hardened RuntimeNot Sandboxed
User
me
Running For
3d 1h
Location
/Applications/Docker.app
Info.plist31
Processes
Ended Recently2
com.docker.build20335Ran 41s · ended 2 min ago 58 MB
com.docker.build20329Ran 1m 3s · ended 9 min ago 61 MB
Google Chrome
Google Chrome · PID 48190
Memory
412 MB
CPU
1.1%
Disk
0 kB/s
Identity
Process ID
48190
Parent Process
launchd (1)
Running For
6h 14m
App
Bundle ID
com.google.Chrome
Version
156.0.8078.74
Architecture
Universal · x86_64 · arm64
Security
Signature
Google LLC · Team ID EQHXZ8M8AV
Hardened Runtime
Yes
Sandbox
No
Entitlements
1
Resource Usage
CPU Time
42m 10s User 32m 54s · 78%System 9m 16s · 22%
Memory
412 MB · 61% of its 672 MB peak
Threads
64
Open Files
318
Child Processes
Tab Process482111.92 GB
Google Chrome Helper (GPU)48193842 MB
Environment31
Google Chrome Helper (Renderer)
Tab Process
Memory
1.92 GB
CPU
4.2%
Disk
12 kB/s
Identity
Process ID
48211
Parent Process
Google Chrome (48190)
Launched By
Google Chrome (48190)
Running For
6h 12m
App
Version
156.0.8078.74
Architecture
Universal · x86_64 · arm64
Arguments
--type=renderer --lang=en-US --num-raster-threads=4 --enable-zero-copy
Security
Signature
Google LLC · Team ID EQHXZ8M8AV
Hardened Runtime
Yes
Sandbox
No
Entitlements
1
Resource Usage
CPU Time
12m 40s User 10m 23s · 82%System 2m 17s · 18%
Memory
1.92 GB · 88% of its 2.18 GB peak
Threads
23
Open Files
96
Environment31
Google Chrome Helper (GPU)
Google Chrome · PID 48193
Memory
842 MB
CPU
2.8%
Disk
0 kB/s
Identity
Process ID
48193
Parent Process
Google Chrome (48190)
Launched By
Google Chrome (48190)
Running For
6h 14m
App
Version
156.0.8078.74
Architecture
Universal · x86_64 · arm64
Arguments
--type=gpu-process --lang=en-US --gpu-preferences=UAAAAAAAAADgAAAEAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAA
Security
Signature
Google LLC · Team ID EQHXZ8M8AV
Hardened Runtime
Yes
Sandbox
No
Entitlements
1
Resource Usage
CPU Time
18m 2s User 12m 37s · 70%System 5m 25s · 30%
GPU
3%
Memory
842 MB · 93% of its 904 MB peak
Threads
31
Open Files
142
Environment31
Google Chrome Helper (Renderer)
Tab Process
Memory
1.31 GB
CPU
0.3%
Disk
0 kB/s
Identity
Process ID
48377
Parent Process
Google Chrome (48190)
Launched By
Google Chrome (48190)
Running For
3h 40m
App
Version
156.0.8078.74
Architecture
Universal · x86_64 · arm64
Arguments
--type=renderer --lang=en-US --num-raster-threads=4 --enable-zero-copy
Security
Signature
Google LLC · Team ID EQHXZ8M8AV
Hardened Runtime
Yes
Sandbox
No
Entitlements
1
Resource Usage
CPU Time
4m 51s User 4m 2s · 83%System 49s · 17%
Memory
1.31 GB · 96% of its 1.36 GB peak
Threads
21
Open Files
88
Environment31
Terminal
Terminal · PID 581
Memory
148 MB
CPU
0.2%
Disk
0 kB/s
Identity
Process ID
581
Parent Process
launchd (1)
Running For
2d 6h
App
Bundle ID
com.apple.Terminal
Version
2.15
Architecture
Apple silicon · arm64e
Security
Signature
Apple
Hardened Runtime
No
Sandbox
No
Entitlements
6
Resource Usage
CPU Time
3m 12s User 2m 2s · 64%System 1m 10s · 36%
Memory
148 MB · 71% of its 208 MB peak
Threads
12
Open Files
58
Child Processes
zsh6012012 MB
zsh6060111 MB
Environment24
zsh
Terminal · PID 60120
Memory
12 MB
CPU
0.0%
Disk
0 kB/s
Identity
Process ID
60120
Parent Process
login (60118)
Launched By
Terminal (581)
Running For
2d 5h
Executable
Architecture
Apple silicon · arm64e
Arguments
-zsh
Security
Signature
Apple
Hardened Runtime
No
Sandbox
No
Resource Usage
CPU Time
1.2s User 0.7s · 58%System 0.5s · 42%
Memory
12 MB · 60% of its 20 MB peak
Threads
1
Open Files
8
Child Processes
node60412486 MB
node60533391 MB
Environment42
node
Terminal · PID 60412
Memory
486 MB
CPU
0.6%
Disk
0 kB/s
Identity
Process ID
60412
Parent Process
zsh (60120)
Launched By
Terminal (581)
Running For
2d 4h
Executable
Architecture
Apple silicon · arm64
Arguments
node_modules/.bin/next dev --port 3000
Security
Signature
Node.js Foundation · Team ID HX7739G8FX
Hardened Runtime
Yes
Sandbox
No
Resource Usage
CPU Time
1h 52m User 1h 42m · 91%System 10m 5s · 9%
Memory
486 MB · 61% of its 797 MB peak
Threads
19
Open Files
203
Network
Listening Ports
3000
Child Processes
next-router-worker60418212 MB
next-render-worker60421180 MB
Environment48
node
Terminal · PID 60533
Memory
391 MB
CPU
12.4%
Disk
2.1 MB/s
Identity
Process ID
60533
Parent Process
zsh (60120)
Launched By
Terminal (581)
Running For
14s
Executable
Architecture
Apple silicon · arm64
Arguments
node_modules/.bin/vitest run --coverage
Security
Signature
Node.js Foundation · Team ID HX7739G8FX
Hardened Runtime
Yes
Sandbox
No
Resource Usage
CPU Time
9.1s User 8.0s · 88%System 1.1s · 12%
Memory
391 MB · 100% of its 391 MB peak
Threads
27
Open Files
412
Child Processes
node6054096 MB
node6054194 MB
Environment48
Docker
Docker · PID 20288
Memory
112 MB
CPU
0.1%
Disk
0 kB/s
Identity
Process ID
20288
Parent Process
launchd (1)
Running For
3d 1h
App
Bundle ID
com.docker.docker
Version
4.88.1
Architecture
Apple silicon · arm64
Security
Signature
Docker Inc · Team ID 9BNSXJN65R
Hardened Runtime
Yes
Sandbox
No
Entitlements
7
Resource Usage
CPU Time
6m 4s User 4m 31s · 74%System 1m 33s · 26%
Memory
112 MB · 48% of its 233 MB peak
Threads
22
Open Files
74
Child Processes
com.docker.backend203111.57 GB
com.docker.build2034064 MB
Environment29
com.docker.backend
Docker · PID 20311
Memory
1.57 GB
CPU
2.1%
Disk
340 kB/s
Identity
Process ID
20311
Parent Process
Docker (20288)
Launched By
Docker (20288)
Running For
3d 1h
App
Version
4.88.1
Architecture
Apple silicon · arm64
Arguments
-watchdog -max-restarts 5
Security
Signature
Docker Inc · Team ID 9BNSXJN65R
Hardened Runtime
Yes
Sandbox
No
Entitlements
7
Resource Usage
CPU Time
3h 8m User 2h 0m · 64%System 1h 8m · 36%
Memory
1.57 GB · 77% of its 2.04 GB peak
Threads
48
Open Files
241
Child Processes
com.docker.build2034064 MB
Environment29
com.docker.build
Docker · PID 20340
Memory
64 MB
CPU
0.2%
Disk
0 kB/s
Identity
Process ID
20340
Parent Process
com.docker.backend (20311)
Launched By
Docker (20288)
Running For
12s
App
Version
4.88.1
Architecture
Apple silicon · arm64
Security
Signature
Docker Inc · Team ID 9BNSXJN65R
Hardened Runtime
Yes
Sandbox
No
Entitlements
1
Resource Usage
CPU Time
2.0s User 1.6s · 80%System 0.4s · 20%
Memory
64 MB · 100% of its 64 MB peak
Threads
9
Open Files
31
Child Processes
buildkitd2034641 MB
Environment29
com.docker.virtualization
Docker · PID 20318
Memory
38 MB
CPU
0.4%
Disk
0 kB/s
Identity
Process ID
20318
Parent Process
com.docker.backend (20311)
Launched By
Docker (20288)
Running For
3d 1h
App
Version
4.88.1
Architecture
Apple silicon · arm64
Security
Signature
Docker Inc · Team ID 9BNSXJN65R
Hardened Runtime
Yes
Sandbox
No
Entitlements
3
Resource Usage
CPU Time
1h 4m User 31m 12s · 49%System 32m 48s · 51%
Memory
38 MB · 73% of its 52 MB peak
Threads
14
Open Files
46
Environment29

The numbers are simulated: a web page cannot read your Mac, and should not.

01Identity

The app behind a process, its code signature and its entitlements.

The drawer opens with the app a process belongs to and what kind of process it is: a browser tab, an extension, a GPU process, a dev server. Then its code signature, with the developer's name and Team ID, whether it uses the hardened runtime and a sandbox, every entitlement it holds, and whether it was built for Apple silicon, Intel or both and is running through Rosetta.

  • The app it belongs to, and whether it is a tab, an extension or a helper
  • The code signature, with the Team ID; Apple’s own say Apple
  • Hardened runtime, sandbox, and every entitlement
  • Built for Apple silicon, Intel or both, and whether Rosetta runs it
Google Chrome Helper (Renderer)
Tab Process
Security
SignatureGoogle LLC · Team ID EQHXZ8M8AV Hardened RuntimeYes SandboxNo Entitlements1
App
Version156.0.8078.74 ArchitectureUniversal · x86_64 · arm64
Code signature and Team ID Built for both, not through Rosetta
02Launch

The parent process, the launch agent and the full command line.

Every process has a parent, and Vitals names it, with the app that launched it and, for a background process, the launchd agent or daemon that starts it at login. The full command line turns a bare node or python into the dev server for a project you know. Under it, the child processes it started, each a click away.

  • Parent process and the app that launched it, each a link
  • The launch agent or daemon that starts it at login
  • The full command line, and its environment when you open it
  • Child processes, each with its own numbers
node
Terminal · PID 60412
Parent Processzsh (60120) Launched ByTerminal (581) Argumentsnode_modules/.bin/next dev --port 3000
Child Processes
next-router-worker60418212 MB
next-render-worker60421180 MB
esbuild6043048 MB
Parent, launcher and the command line Child processes under it
03Usage

CPU time, memory peak, open files and listening ports since it started.

A percentage is about this second. The drawer covers the process's whole life: CPU time since it started, split into its own work and the kernel's work for it; memory now against the most it has ever held; threads, open files, page-ins, bytes read and written, and the ports it listens on, with a live chart of CPU and memory while the drawer is open.

  • CPU time, split into user and system
  • Memory now, as a share of its lifetime peak
  • Threads, open files, page-ins, disk read and written
  • Listening ports, and live charts while the drawer is open
com.docker.backend
Docker · PID 20311
Resource Usage
CPU Time 3h 8mUser 2h 0m · 64%System 1h 8m · 36% Memory 1.57 GB · 77% of its 2.04 GB peak Threads48 Open Files241 Bytes Read4.2 GB Bytes Written1.1 GB
Since this drawer opened.CPU 2.1% · 1.57 GB
Since it launched, not this second Charted while you watch
04Apps

An app’s version, bundle ID and Info.plist, with every process under it.

Open an app and its Details card gives the version, bundle ID, location, code signature and what starts it, with the whole Info.plist one click away. Its processes are listed underneath, each a click from its details. One that just started carries a New mark, and the ones that ended in the last ten minutes stay listed, so a crash or a helper that came and went is not lost.

  • Version, bundle ID and the whole Info.plist
  • Every process, with a New mark on one that just started
  • Ended Recently: what closed in the last ten minutes
  • Pick the table’s columns, and filter with /a regex/
Docker
Details
Version4.88.1 Bundle IDcom.docker.docker SignatureDocker Inc · Team ID 9BNSXJN65R Info.plist31
ProcessesClick one for its details
Docker20288112 MB
com.docker.backend203111.57 GB
com.docker.build20340New64 MB
Ended Recently2
Info.plist, one click away What ended in the last ten minutes
05Export

Export a process as CSV, or run vitals process in Terminal.

Every drawer has an export menu: Copy as Text for a message or a bug report, Save as CSV for a spreadsheet, Info.plist and entitlements included. In Terminal, vitals process gives the same for any process by name or PID, and an AI assistant gets it over MCP through the process_details tool.

  • Copy as Text, or Save as CSV
  • vitals process node, or by PID, with --json for scripts
  • --env adds the environment, --plist the Info.plist
  • The process_details tool for Claude, Codex and Cursor over MCP
Copy as Text
Save as CSV…
~ vitals process node
node pid 60412 Terminal
~/.nvm/versions/node/v24.15.0/bin/node
user me · since 9:53 AM (2d 4h) · parent zsh (60120)
Apple silicon · signed by Node.js Foundation (HX7739G8FX)
arguments node_modules/.bin/next dev --port 3000
● CPU0.6% · 1h 52m in all · user 91%, system 9%
● Memory486 MB · peak 797 MB · real 210 MB
● Ports3000
Copy as Text, or Save as CSV The same over MCP, for an assistant
Why it matters

Process Inspector, before and after

Activity Monitor's Inspect window gives a process its parent, its user, CPU time, memory, open files and ports, and a sample. It does not say who signed it, which app a bare node belongs to, what starts it at login, or what the whole command line was. For those you open Terminal: codesign for the signature, ps for the arguments, launchctl for what starts it, lsof for the ports, and plutil for the Info.plist.

The question is usually simpler than that. What is this? A process called Helper, a python nobody remembers starting, something with a name like com.apple.something using half a core. Is it part of an app I installed, is it Apple's, and should it be running?

Vitals answers in one drawer: the app the process belongs to and what kind of process it is, its code signature and entitlements, its parent and its command line, the processes it started, and the CPU time, memory, files and ports it has used since it launched, with the version, Info.plist and entitlements folded underneath. The same answer comes as CSV, as vitals process in Terminal, and as a tool for an AI assistant.

How to use it

Where it is in Vitals

The tab, the menu bar item and the setting, in the order you would reach for them.

  1. 01

    Click any process to open its drawer

    In any tab, click an app and then one of its processes, or hover over a process in an app's drawer and click the ⓘ. The drawer opens on it. ⌘F finds a process by name, and /a pattern/ searches with a regular expression.

  2. 02

    Read the drawer section by section

    Identity, then App or Executable, Security, Resource Usage, Disk, Network and Child Processes. Info.plist, Entitlements and Environment are folded until you open them. The parent, the launcher and each child are links: click one to jump to it.

  3. 03

    Choose the columns of the process table

    The Columns button in the toolbar adds or removes a tab's columns: PID, user, path, version, start time, idle wake-ups and the readings. Each tab keeps its own choice.

  4. 04

    Copy it, save it as CSV, or ask in Terminal

    The share button in the drawer's header offers Copy as Text and Save as CSV. In Terminal, vitals process <name> or vitals process <pid>, with --json, --env or --plist. Over MCP, the process_details tool.

Compared

Process Inspector: Activity Monitor and Vitals

The whole comparison is row by row. These are the rows about process Inspector.

Activity Monitor Vitals
Details for one process
Activity MonitorAn Inspect window: parent, user, CPU time, memory, open files and ports
VitalsThose, and its app, signature, entitlements, command line, what starts it, lifetime peak and children
Code signature
Activity MonitorNot shown; codesign in Terminal
VitalsSigner, Team ID, hardened runtime, sandbox and entitlements
Parent process and command line
Activity MonitorThe parent PID
VitalsParent, the app that launched it, the launchd job, and the command line
An app’s version and Info.plist
Activity MonitorNot shown
VitalsVersion, bundle ID and the whole Info.plist
A process that ended
Activity MonitorGone from the list
VitalsEnded Recently, for ten minutes
Export
Activity MonitorA sample or a spindump, as text
VitalsCopy as Text, Save as CSV, vitals process --json
Sampling and spindumps
Activity MonitorYes
VitalsNo

The words behind it

What the numbers mean, from the Activity Monitor glossary.

Questions

The ones people ask about process Inspector before they buy.

How do I open the Process Inspector?

Click a process in any list and its drawer opens. In an app's drawer, every process is a row: click one, or the ⓘ that appears beside it when you hover. Press ⌘F to find a process by name, and type /a pattern/ to search with a regular expression.

What does a process’s code signature tell me?

Who built the code. A name with a Team ID is a developer Apple has identified, such as Google LLC or Docker Inc. Apple's own processes say Apple. "Signed, with no certificate" is a tool built on a Mac and signed by nobody in particular, which is normal for Homebrew and for what you compile yourself. "Not signed" means no signature at all. Under it: whether it uses the hardened runtime, whether it runs in a sandbox, and every entitlement it was granted.

Can Vitals tell me whether a process is safe, or malware?

It gives you the facts to judge: the code signature, the parent process, where it lives, and what it is doing. A known maker with a Team ID, a sandbox, and a parent you recognize is what you want to see. No signature, a path in a hidden folder, and a launch agent you never installed deserve a closer look. Vitals does not scan for malware; it tells you what is there.

What is CPU time, and why is it split into user and system?

CPU time is how long the process has kept a core busy since it launched, added up: a process at 50% of one core for two hours has used an hour. User time is the process's own work; system time is work the kernel did for it, like reading files or talking to the network. A high system share on a process that does little usually means it is busy asking macOS for things.

Why do some processes show fewer details than others?

macOS shows a process's command line, environment and lifetime totals only to the user it runs as. A process that belongs to macOS or to another account keeps those to itself; its identity, signature and figures still show, the figures through Vitals' optional helper. Turn on Full System Metrics in Settings → General to get them.

Does it show macOS processes like WindowServer and kernel_task?

Yes. Their app is macOS, their signature is Apple's, and their parent is launchd. With the helper on, their CPU and memory show as well, and the drawer's charts run while it is open.

Can I see a process's environment variables?

Yes, in the Environment section at the end of the drawer, folded until you open it, and in Terminal with vitals process --env. They are never passed to an AI assistant, since environments often hold keys.

How long does Vitals keep a process after it has ended?

Ten minutes, in the app's drawer, with its name, when it started and ended, and the memory it held. So a helper that crashed, or a build that finished while you were away, is still there to see.

Can I get a process’s details in Terminal, or from an AI assistant?

Yes. vitals process node or vitals process 60412 gives the same details, as text or with --json for a script; --env adds the environment and --plist the app's Info.plist. An assistant such as Claude, Codex or Cursor gets it through the process_details tool of Vitals' MCP server, Info.plist included when it asks.

Can it sample a process or take a spindump?

No. Those are Activity Monitor's, and Vitals does not copy them. Vitals answers what a process is, with its code signature, its parent and its resource use; for a stack trace of a hung app, open Activity Monitor and press Sample.

Read on

Guides that use this, and how Vitals compares with the apps people buy for it.

More of Vitals

All features

Lifetime for $15 while the launch price lasts

50 left at this price. Then $39, or $9 for a year of updates. One payment, 14-day refund.

Get Vitals for $15