proc

process management that makes sense.

target by port, pid, name or path. one syntax everywhere.

what's on port 3000?
proc on :3000
kill it
proc kill :3000
free the port (kill + verify)
proc free :3000
why is this port busy?
proc why :3000
node processes in this directory
proc by node --in .
wait for it to finish
proc wait node

before / after

taskwithout procwith proc
what's on port 3000? lsof -i :3000 -P -n proc on :3000
kill it lsof -i :3000 -t | xargs kill -9 proc kill :3000
free the port lsof -t -i:3000 | xargs kill && sleep 1 && lsof -i:3000 proc free :3000
wait for process while ps aux | grep node | grep -v grep; do sleep 5; done proc wait node
find orphans no standard tool proc orphans
pause a process kill -STOP $(pgrep node) proc freeze node

commands

discovery

proc on :3000 what's on this port?
proc by node find by name
proc for ./app.js what's running this file?
proc in . processes in this directory
proc why :3000 trace ancestry
proc orphans find abandoned processes
proc ports all listening ports
proc tree process hierarchy

lifecycle

proc kill :3000 force kill
proc stop node graceful shutdown
proc free :3000 kill + verify port freed
proc freeze node pause (SIGSTOP)
proc thaw node resume (SIGCONT)
proc wait node block until exit

composable

targets work everywhere: :port, PID, name. comma-separate for multiple. add --in . to scope to current directory. add --json for structured output.

proc kill :3000,:8080,node --in . --json --yes

full command reference →

install

macOS
brew install yazeed/proc/proc
npm / bun
npm install -g proc-cli
rust
cargo install proc-cli
shell
curl -fsSL https://raw.githubusercontent.com/yazeed/proc/main/install.sh | bash

all platforms →