24

I need the process ID of processes created using supervisord for use in a script. Processes spawned by supervisord don't create .pid files in their default directories, if at all.

How do I get the process ID of a supervisord child process?

user1561108
  • 2,666
  • 9
  • 44
  • 69

3 Answers3

27

As of supervisor version 3 you can use the supervisorctl pid <name> command to list pids of managed processes:

supervisorctl pid programname

Use supervisorctl pid all to get a newline-separated list of pids of all managed processes.

For older supervisord versions, you are stuck with supervisord status, but with a little awk, sed and paste massaging, you can extract those pids to be acceptable as input to other commands:

echo `bin/supervisorctl status | grep RUNNING | awk -F' ' '{print $4}' | sed -e 's/,$//' | paste -sd' '`

would list all pids of running programs as a space-separated list. Replace echo with a kill -HUP command to send them all the SIGHUP signal, for example.

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
  • cheers Martijn. Irrelevant now thanks to your earlier answer :) Still cannot get group commands and restart working though. – user1561108 Dec 01 '12 at 21:23
  • Surprising that there's no straight forward way to do this. But this works like a charm – JRun Dec 30 '15 at 09:45
17

You can now do the following:

sudo supervisorctl pid all
sudo supervisorctl pid myprogramname
Seán Hayes
  • 4,060
  • 4
  • 33
  • 48
0

System centos7

command:

ps -ef|grep $(cat /tmp/supervisord.pid)|grep -v grep |grep -v supervisord|awk '{print $2}'

The file /tmp/supervisord.pid records the supervisord id.

You can get child process by ps -ef|grep ${fatherProcess}