supervisord stopping child processes

Solution 1:

The same problem was encountered by Rick Hanlon II here: https://coderwall.com/p/4tcw7w

Option stopasgroup=true should be set in the program section for supervisord to stop not only the parent process but also the child processes.

The example is given as:

[program:some_django]
 command=python manage.py runserver
 directory=/dir/to/app
 stopasgroup=true

Also, have in mind that you may have an older package of supervisord that does not have "stopasgroup" functionality. I tried these Debian packages on Raspberry Pi:

  • supervisor_3.0a8 does not work.
  • supervisor_3.0b2-1 works as expected.

Solution 2:

Doing the following early in the main bash script called by supervisord fixed the problem for me:

trap "kill -- -$$" EXIT

This kills the entire process group when the main script exits, such as when it is killed by supervisord.

Solution 3:

A feature was recently added to supervisord to send SIGKILL to the whole process group. It's in github but not officially released yet.

If the process id is available in a file, you can use the pid-proxy program

Solution 4:

try this supervisor program config:

stopasgroup=true
killasgroup=true
stopsignal=INT

Solution 5:

The following article has an in-depth discussion of the problem:

http://veithen.github.io/2014/11/16/sigterm-propagation.html