Show commandline name instead of shortened command line

/proc/pid/cmdline holds the complete command line for a process unlike
/prod/pid/comm

The biggest difference when using cmdline vs comm is the following, when
running an app via update-alternatives as done with Debian for example,
you get the name x-terminal-emulator vs x-terminal-emul. Essentially, we
want the full name of the process and not the shortened one.

This would allow for some more magic with which, readlink and basename
that to get the actual name. However, readlink isn't available on all
systems and some options aren't available on BSD systems. realpath might
be used, but also that may not be available, which leaves us with
implementing a bash only solution in case these do not exist. I've tried
doing that with bash (via bats) in the past. Bats solved it doing it
like this: https://github.com/bats-core/bats-core/pull/312

An alternative way is to ls the file /proc/id/exe and look at where
this symlink is pointing to and basename that:

  $(basename ls -l /proc/2464281/exe | awk '{print $NF}')

Signed-off-by: Wesley Schwengle <wesleys@opperschaap.net>
This commit is contained in:
Wesley Schwengle 2024-04-06 22:59:19 -04:00
parent ccd5d9f526
commit b4054ec28a

View file

@ -4943,7 +4943,7 @@ get_process_name() {
;;
"Linux")
name="$(< "/proc/${1:-$PPID}/comm")"
name="$(< "/proc/${1:-$PPID}/cmdline")"
;;
*)