Передача сигнала в управляемые процессы с помощью супервизора - PullRequest
3 голосов
/ 20 августа 2010

Я использую supervisord для создания и управления приложением FastCGI, которое я пишу на C для цели linux.У меня есть обработчик сигнала, который изящно выходит из моего приложения при получении SIGINT.Я проверил, что обработчик сигнала работает как нужно, запустив приложение в окне терминала и выполнив Ctrl-C для выхода.

При выдаче команды «shutdown» для supervisord (через supervisorctl), кажется, что supervisordне может принудительно закрыть приложение без вызова SIGKILL:

2010-08-20 10:02:49,661 INFO waiting for cse to die
2010-08-20 10:02:52,665 INFO waiting for cse to die
2010-08-20 10:02:55,669 INFO waiting for cse to die
2010-08-20 10:02:58,672 INFO waiting for cse to die
2010-08-20 10:02:59,673 WARN killing 'cse' (2031) with SIGKILL
2010-08-20 10:02:59,674 INFO stopped: cse (terminated by SIGKILL)

В моем файле supervisord.conf есть следующее

stopsignal=INT

Я предполагаю, что супервизор выдает "стоп-сигнал"при вызове команды shutdown, поэтому я принимаю операторы INFO как указание на то, что мое приложение не отвечает на SIGINT, выданный supervisord.

Как мне отладить передачу сигнала между supervisord и моим приложением

Ответы [ 3 ]

3 голосов
/ 31 августа 2010

После еще нескольких копаний выясняется, что проблема не в том, что супервизор не может передавать сигналы дочерним процессам.Кажется, это работает нормально.

Скорее всего, супервизор прекращает регистрировать выходные данные дочернего процесса stderr, как только он получает запрос на вызов стоп-сигнала.В результате, любое ведение журнала останова дочернего процесса на основе stderr не будет обрабатываться супервизором.В моем случае это создало впечатление, что дочерний процесс не получал SIGINT, так как он ничего не записывал в stderr после вызова сигнала.

2 голосов
/ 07 сентября 2012

Эта ошибка была исправлена ​​в выпуске Supervisor 3.0a10 (2011-03-30) в соответствии с этим коммитом: https://github.com/Supervisor/supervisor/commit/e19cbc185dfad045c8775750d36ab8ceed4c4dfb

2 голосов
/ 23 августа 2010

Вы можете запустить supervisord в командной строке в режиме отладки и получить дополнительную информацию.

supervisord -n -e debug

...