ast_coredumper: Refactor the pid determination process
authorGeorge Joseph <gjoseph@digium.com>
Mon, 24 Dec 2018 17:42:36 +0000 (10:42 -0700)
committerSean Bright <sean.bright@gmail.com>
Mon, 24 Dec 2018 19:17:38 +0000 (14:17 -0500)
commit809e83626583ddb0f5a0f9d0ccbd05372ac0318e
tree033a4fc1c763e19cd70a371c4963e1bf63c485fe
parent31bacc2354f6e91d595423264d30a6e7435fe453
ast_coredumper:  Refactor the pid determination process

In order to get a dump of the running process, we need to find the
pid of the main asterisk process.  This can be tricky if there are
also instances of "asterisk -r" running or if an alternate location
for asterisk.conf was specified on the command line with the -C
option that also specified an alternation location for the pid file.

So now...

1. We find the asterisk executable with "which" or the --asterisk-bin
   command line option.
2. If there's only 1 process with an executable path that matches,
   we use that pid.  If not...
3. We try "<asterisk-bin> -rx 'core show settings'" and parse the
   output to find the pidfile, then read that for the pid.  If that
   didn't work...
4. We get a list of all the pids matching <asterisk-bin> and look
   in /proc/<pid>/cmdline for a -C argument and retry the "core show
   settings" using the same -C option.  We can't parse the output
   of "ps" to get the -C path because it may contain spaces.  The
   contents of /proc/<pid>/cmdline are delimited by NULLs.  For BSDs
   we may have to mount /proc first. :(

ASTERISK-28221
Reported by: Andrew Nagy

Change-Id: I8aa1f3f912f949df2b5348908803c636bde1d57c
contrib/scripts/ast_coredumper