2013-08-24 2 views
1

Я запускаю много процессов PHP через Supervisord. Иногда мне нужно закрыть Супервизор. Когда я это делаю, я посылаю сигнал TERM ко всем процессам PHP, которые он породил (используя stopsignal=TERM в supervisord.conf).Как поймать сигнал UNIX TERM, чтобы я мог изящно завершить процесс PHP?

Я хотел бы перехватить этот сигнал TERM и изящно завершить процесс PHP. Это можно сделать?

Я добавил этот код на PHP программу, чтобы попытаться сделать это:

declare(ticks = 1); 
function gracefully_terminate() { 
    echo "\n\ngracefully terminating\n\n"; 
} 
pcntl_signal(SIGTERM, "gracefully_terminate"); 

Также ... для удобства тестирования, как я могу отправить сигнал TERM процессу PHP с помощью интерфейса командной строки ? Я пробовал использовать Kill -s TERM ##### (##### - это PID процесса PHP). Возможно, это посылает сигнал TERM, но это не завершает процесс PHP.

+0

ли ваш supervisord работник имеет возможность сделать паузу некоторое время и затем остановить работника в 'gracefully_terminate () 'метод? Я борюсь с аналогичной проблемой (http://stackoverflow.com/questions/34291871/pause-supervisord-stop-event-for-a-while-using-php). У вас есть какие-либо предложения? – Roopendra

ответ

-1

Я не так хорошо разбираюсь в php, но не должен gracefully_terminate функция имеет один параметр? Как:

function gracefully_terminate($signo) 

Для завершения процесса из CLI вы должны использовать

kill -s SIGTERM ##### 

или

killall processname 
Смежные вопросы