Skip to content
Snippets Groups Projects
  • George Joseph's avatar
    809e8362
    ast_coredumper: Refactor the pid determination process · 809e8362
    George Joseph authored
    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
    809e8362
    History
    ast_coredumper: Refactor the pid determination process
    George Joseph authored
    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