Processes

What is running, busiest first, and who holds a port

palupdated 2026-10-27SystemComes with pal

Open in pal

Comes with pal, so a new install already has it; the button finds it in pal again if you removed it. This page can't see what your pal has installed.

Processes: Processes by CPU, then memory: a busy one wears its share as a tag, its pid under the name and its memory on the right
Processes by CPU, then memory: a busy one wears its share as a tag, its pid under the name and its memory on the right
Processes: Type : for every TCP listener: the port as a tag, beside the process that holds it
Type : for every TCP listener: the port as a tag, beside the process that holds it
Processes: Enter kills, but asks first: SIGTERM here, Force kill's SIGKILL behind cmd+shift+k
Enter kills, but asks first: SIGTERM here, Force kill's SIGKILL behind cmd+shift+k
Processes: Kill, Force kill, Copy PID or open the process in Activity Monitor
Kill, Force kill, Copy PID or open the process in Activity Monitor
Processes: A process's detail (cmd+I): where it runs from, then its CPU, memory and pid large
A process's detail (cmd+I): where it runs from, then its CPU, memory and pid large
1 of 5

What it does

What is running, busiest first, with its memory; type :3000 to see what listens on a port. Kill a process or open it in Activity Monitor.

  • Every process sorted by CPU then memory, with its pid and memory, busy ones tagged with their CPU share
  • Search by name or pid; :3000 lists what listens on that port, : alone every listener
  • Filters for your own processes, the top CPU users and the top memory users
  • Kill or force kill (cmd+shift+k) after a confirm, and the list stays open
  • App icons for processes that belong to an app; cmd+o finds the process in Activity Monitor
  • cmd+i shows the process as a page: where it runs from, its CPU, memory and pid large, then parent and user

Palettes 1

  • Processesprocessesinput

    Every process, by CPU then memory.

    • ↵Kill (asks first)
    • ⌘⇧KForce kill (asks first)
    • ⌘CCopy the pid
    • ⌘OOpen in Activity Monitor (macOS)

Actions

  • KillSIGTERM, after a confirm.↵
  • Force killSIGKILL, after a confirm.⌘⇧K
  • Copy PID⌘C
  • Open in Activity MonitormacOS: brings Activity Monitor up with the pid in its search field.⌘O

Settings

Extension, [extensions.processes]

include_system
Off boolean

Defaults shown. Change them in pal's settings window or in the config file.

The README

Everything Processes does, key by key, from the extension's own README.md

Processes

What is running, from ps, listed again on every keystroke because the set changes constantly (an input palette; the root only has its own row). The query matches the name or a pid prefix. The row is the executable's name, its pid the subtitle with the full path after it on macOS (Linux ps gives only the name; an app's process shows its icon instead); the resident memory sits on the right, and a process above 10% CPU carries a NN% cpu tag (amber, red from 50%). Rows are sorted by CPU, then memory. On macOS a process that lives in a .app bundle gets that app's icon, any other a chip glyph. The detail pane (cmd+i) leads with the full command and the name, the CPU share, the memory and the pid large, then the parent pid and the user.

A query of : and digits lists what listens on TCP ports instead of processes: :3000 that port, :30 every port starting with 30, : alone every listener. One row per process and port with the port as a blue tag and the address and pid as subtitle; a process ps knows gets its usual numbers and icon. ss -ltnp on Linux, else lsof -iTCP -sTCP:LISTEN (macOS ships it). A row's id is pid:port, and it has the same actions.

The filter dropdown (tab cycles it) scopes the list:

filter rows
All everything (the default)
Mine your own user's processes
Top CPU the 25 busiest
Top memory the 25 largest, by resident memory

Keyboard

keys action
enter Kill: SIGTERM, after a confirm; the palette stays open and lists again
cmd+shift+k Force kill: SIGKILL, after a confirm
cmd+c Copy PID
cmd+o Open in Activity Monitor (macOS): brings the app up and types the pid into its search field
tab Next filter

A kill that fails (a process of another user, a pid that is gone) keeps the panel open with a toast carrying the OS's message.

Setup

Nothing to install: ps is everywhere, lsof ships with macOS, ss with most Linux distributions (without either the port query shows one hint row saying which to install). Open in Activity Monitor types the pid through System Events, which asks for Automation once and needs Accessibility for the keystrokes; without it the app just comes up.

Settings, [extensions.processes]:

key type default what
include_system bool false List system processes too: pids below 100, and kernel threads (children of kthreadd) on Linux.

What it does not do

  • Kill by name: the rows are processes, one pid each. Type the name, then kill the rows you mean, one at a time.
  • Killing another user's process: no sudo, so the toast carries the OS's refusal.
  • Other signals: SIGTERM and SIGKILL only.
  • UDP or remote sockets: the port query lists TCP listeners.
  • pal's own host process is left out of the list.

Platforms

macOS and Linux. The full path in the subtitle, app icons and Open in Activity Monitor are macOS; kernel threads and ss are Linux.