Target processes by port, PID, name or path.

proc is a semantic CLI tool for process management on macOS, Linux and Windows. Find what's on a port, why it's there, and stop it, in one command you'd guess on the first try.

~proc kill :3000

Ends whatever is listening on port 3000 immediately (SIGKILL). Asks first, and --dry-run previews.

A leading colon means a port: proc acts on whatever is listening on it.

brew install yazeed/proc/proc

One command instead of a pipeline

The same jobs, without remembering which flags lsof needs or piping PIDs into kill.

lsof -i :3000 -P -n
proc on :3000
lsof -i :3000
ps -o ppid=
proc why :3000
lsof -t -i:3000 | xargs kill && sleep 1 && lsof -i:3000
proc free :3000
while ps aux | grep node | grep -v grep; do sleep 5; done
proc wait node
kill -STOP $(pgrep node)
proc freeze node
proc orphans --in .

Nineteen commands, three jobs

Every command takes the same targets, and almost all take --in to stay inside one project, --json for scripts, and --dry-run before anything changes.

Find out

Read-only. Nothing is touched.

Change it

Asks first, or previews with --dry-run.

Made for scripts and coding agents

Every command prints one JSON document with --json, and exit codes always mean the same thing. An agent can read proc the way you do, without parsing tables.

  • 0 success, 1 error, 2 not found, 3 permission denied, 4 invalid input
  • --dry-run shows what would be touched, and nothing else
  • The agent skill teaches Claude Code, Codex, Cursor, Gemini CLI and others when to reach for proc
❯ proc on :8080 --json | jq '.process | {pid, cwd, uptime_secs}'
{
  "pid": 177,
  "cwd": "/home/dev/code/shop",
  "uptime_secs": 35
}