PARGS(1)

πŸ“¦
version 0.2.23 Β· 4 versions
, in fedora 44

πŸ’– NAME πŸ’–

pargs β€” bestie, this is the tool that prints a process's arguments, its environment variables, or its auxiliary vector. That's it. That's the whole job. And it ate. πŸ’…


✨ SYNOPSIS ✨

pargs [-l] [-a|--args] [-e|--env] [-x|--auxv] [pid | core]...

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so picture this: you've got a target process, or a process core file, and you want the tea. pargs peeks inside and prints out the arguments, the environment variables and their values, or the process auxiliary vector. πŸ‘‘

For live processes, the arguments and environment variables are read straight out of process memory, which means you're seeing the current state β€” including anything that got modified at runtime. Yes, like when someone calls setenv(3), or just straight-up overwrites argv. 😌

And this is the part that's giving different energy from /proc/pid/cmdline and /proc/pid/environ, because those two are just static snapshots frozen at process start. No updates. No growth. Just vibes from the past. Meanwhile pargs is live, current, in the group chat right now. πŸ“²

Also! Two little twins you should know about:

  • The pauxv command is literally equivalent to running pargs(1) with the -x option.
  • The penv command is literally equivalent to running pargs(1) with the -e option.

Periodt. πŸ’–


πŸŽ€ OPTIONS πŸŽ€

  • -l β€” prints the arguments as one single command line. The way it's printed is suitable for interpretation by /bin/sh, so it's copy-paste-into-your-shell friendly. iconic behaviour honestly. 🐚
  • -a, --args β€” print the process arguments. This is the default btw, in case you were wondering. For live processes, these are read from process memory and reflect the current values. πŸ’«
  • -e, --env β€” print the process environment variables and their values. For live processes, the environment is read from process memory via the environ symbol, and it reflects runtime changes made with setenv(3) or putenv(3). so if somebody changed it, you'll see it. πŸ”
  • -x, --auxv β€” print the process auxiliary vector exactly as contained in /proc/pid/auxv. 🧚

🌸 OPERANDS 🌸

  • pid β€” a Process ID list. You can also pass a /proc/pid path instead, which means shell expansions like /proc/* will target all processes on the system. Go off, glob. 🌈
  • core β€” a process core file, as produced by systemd-coredump(8), or an Ubuntu/Debian apport .crash file. For systemd core files, the file does not need to exist on disk β€” if it's been removed, the corresponding systemd journal entry gets used instead. Check the NOTES below for the whole story. πŸ‘€

πŸ’€ EXIT STATUS πŸ’€

  • 0 on success πŸŽ‰
  • non-zero if an error occurs β€” like no such process, permission denied, or an invalid option. sad but true. 😭

πŸ“ FILES πŸ“

  • /proc/pid/* β€” process information and control files. the source of truth, the archives, the lore. πŸ“

🧚 NOTES 🧚

So here's the situation, bestie. When a core file has been removed by systemd-tmpfiles(8), or by storage limits configured in coredump.conf(5), the systemd-coredump(8) journal entry for the crash may still be available. In that case you can pass the path to the deleted core file as the core operand β€” even though the file no longer exists on disk β€” and the process metadata will be retrieved from the journal entry instead. ✨

Want the path of a missing core file? Use coredumpctl(1), like this:

coredumpctl list <name> -F COREDUMP_FILENAME

Ubuntu/Debian apport .crash files are supported too 🫢. These files use Debian control syntax with base64-encoded gzip core dumps. Text fields β€” such as ProcCmdline, ProcEnviron, and ExecutablePath β€” are mapped to COREDUMP_* fields, and the core dump is extracted on first access. lowkey magic. πŸͺ„


πŸ‘‘ SEE ALSO πŸ‘‘

pauxv(1), penv(1), coredumpctl(1), proc(5)


okay that's the whole page, you're so welcome πŸ’œ this was pargs 0.2.23, from September 2026 β€” go read a process's whole diary, bestie, it's your moment. πŸŽ€βœ¨

πŸ“¦ where this page comes from