discovery
| command | aliases | description |
|---|---|---|
| on | : |
port/process lookup (bidirectional) |
| why | trace why a port is busy or show process ancestry | |
| for | f |
find processes by file path |
| by | b |
filter processes by name |
| in | filter processes by working directory | |
| list | l, ps |
list processes |
| info | i, inspect |
show detailed process information |
| ports | p |
list all listening ports |
| tree | t |
show process tree |
| watch | w, top |
real-time process monitoring |
| stuck | x |
find stuck/hung processes |
| orphans | o |
find orphaned processes |
lifecycle
| command | aliases | description |
|---|---|---|
| kill | k |
force kill processes (SIGKILL) |
| stop | s |
graceful stop with –signal support (SIGTERM, then SIGKILL) |
| freeze | pause processes (SIGSTOP) | |
| thaw | resume frozen processes (SIGCONT) | |
| free | free ports by killing the occupying process | |
| wait | block until process(es) exit | |
| unstick | u |
attempt to recover stuck processes |
common options
most commands support these flags (check individual command pages for details):
| flag | short | description |
|---|---|---|
--json |
-j |
output as JSON |
--verbose |
-v |
show extra details |
--in <dir> |
-i |
filter by directory |
--by <name> |
-b |
filter by process name |
--help |
-h |
show help |
target syntax
targets work the same way everywhere:
proc on :3000 # port
proc on 1234 # PID
proc on node # name
proc kill :3000,:8080 # multiple (comma-separated)
scripting
with --json, every command prints one JSON document with action (the command name) and success. proc watch --json streams one per refresh. errors, including invalid flags, are JSON too.
| exit code | meaning |
|---|---|
0 |
success |
1 |
error, or not fully successful: a process failed, a port stayed busy, wait timed out |
2 |
process or port not found |
3 |
permission denied |
4 |
invalid input (unknown flag, bad argument, invalid signal) |
"success": false always comes with a non-zero exit code.