WITR(1)
okay so welcome to WITR(1) β that's section 1 of the manual, bestie π β aka the little tool that answers the question every sysadmin screams at 3am: "WHY is this thing running?!" Let's get into it. π«Ά
π NAME π
witr β Why is this running? π
That's it, that's the whole name. Short, iconic, does exactly what it says on the tin. β¨
πΈ SYNOPSIS πΈ
witr [process name...] [flags]
So you give it a process name (or a bunch of them, she's flexible π) and then whatever flags your heart desires. Simple as. π¦
π¦ DESCRIPTION π¦
Okay so here's the vibe: witr tells you why a process or a port is running, by tracing its ancestry π. Like, it goes up the family tree β who started this, who started them, all the way back β so you can finally figure out where this random daemon came from. It's giving detective energy πβ¨. No more squinting at ps output wondering who's your daddy. Periodt.
π OPTIONS π
The menu, mwah π β every single one, no skipping:
--env[=false]β spills the tea on the process's environment variables π΅ (all the env stuff it's running with).-x,--exact[=false]β match the name exactly, no substring search. So if you saybun, she looks forbun, notbunnyorbundleπ.-f,--file=[]β hand her a file path (or several β she's repeatable π«) and she'll hunt down the process holding it.-h,--help[=false]β the help, forwitr. Your girl's got you π«Ά.-i,--interactive[=false]β interactive mode, aka a whole TUI. Main character energy, you get to poke around π .--json[=false]β hand the result back as JSON, machine-readable and clean. For the script girlies π€β¨.--no-color[=false]β kills the colorized output. Perfect for CI or when you're piping things around π«π.-p,--pid=[]β look stuff up by pid(s). Repeatable, so stack 'em up π.-o,--port=[]β look up port(s). Also repeatable bestie, go wild π.-s,--short[=false]β just the ancestry, nothing else. Short king output π.-t,--tree[=false]β the ancestry, but as a tree π³. Aesthetic and informative.--verbose[=false]β the extended process info: she says more, she shows more π¬.--warnings[=false]β only the warnings, nothing but the warnings. Sometimes that's all you need π¨.
π₯ EXAMPLE π₯
Okay the receipts, let's go β every single one, verbatim:
# Inspect a running process by name
witr nginx
# Look up a process by PID
witr --pid 1234
# Find the process listening on a specific port
witr --port 5432
# Find the process holding a lock on a file
witr --file /var/lib/dpkg/lock
# Inspect a process by name with exact matching (no fuzzy search)
witr bun --exact
# Show the full process ancestry (who started whom)
witr postgres --tree
# Show only warnings (suspicious env, arguments, parents)
witr docker --warnings
# Display only environment variables of the process
witr node --env
# Short, single-line output (useful for scripts)
witr sshd --short
# Disable colorized output (CI or piping)
witr redis --no-color
# Output machine-readable JSON
witr chrome --json
# Show extended process information (memory, I/O, file descriptors)
witr mysql --verbose
# Combine flags: inspect port, show environment variables, output JSON
witr --port 8080 --env --json
# Multiple inputs
witr nginx node
witr --port 8080 --port 3000
witr --pid 1234 --pid 5678
# Mixed inputs
witr nginx --pid 1234 --port 8080
See how she just gets it? Names, pids, ports, files, all mixed together like a little charcuterie board of debugging π§π. Slay.
and that's the whole page, bestie π¦ β this was WITR(1), dropped Apr 2026, and yeah we're still section 1 because some things never change π. Go find out why that process is running. You've got this. β¨ππ
π¦ where this page comes from
- ubuntu stonking: witr 0.3.1+ds-1 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms