Форман не убивает процессы

Для запуска приложения я использую Foreman. Форман запускает процесс из Procfile

web: bundle exec rails server thin -p $PORT
worker: bundle exec rake environment resque:work QUEUE=send_mail
api: bundle exec rails server thin -p $PORT

Если я нажму Ctrl + C в консоли, где я запускаю бригадира, бригадир завершится, но запущенный процесс не будет уничтожен. Можно ли убить процесс, который запустил бригадир, когда бригадир убил.


person Oksana    schedule 12.11.2011    source источник
comment
У меня точно такая же проблема. Форман не будет убивать серверы Faye, написанные на Ruby.   -  person Linus Oleander    schedule 12.11.2011
comment
+1 здесь ... У меня проблемы с тем, что Форман убивает серверы Руби Фэй. Я подозреваю, что это связано с сигналом, который Форман отправляет запущенным процессам, чтобы убить их, хотя, когда я запускаю сервер Faye вручную, у меня нет проблем с его уничтожением с помощью Ctrl + C.   -  person Bryan    schedule 12.11.2011
comment
Убивает ли это их в конце концов? Насколько я понимаю, Форман выдаст SIGTERM, а через 10 секунд SIGKILL.   -  person Neil Middleton    schedule 05.12.2011


Ответы (3)


В приведенном ниже примере предполагается, что используется порт 4567, затем выполните:

lsof -i :4567

Это дает вам pid процесса, скажем, 34564, а затем убиваете его с помощью

kill -9 34564

Если вы используете Windows, установите cygwin, чтобы получить команды lsof и kill.

person ftravers    schedule 03.02.2012
comment
И если вы не хотите искать PID, вы можете использовать killall "foreman: master" - person adriaan; 03.06.2015

Тонкий не завершается, пока есть открытые соединения. Фэй использует длительный опрос или веб-сокеты (длительные соединения). Таким образом, конечным результатом является то, что Thin ждет закрытия ваших соединений Faye.

Попробуйте отключить обработчики сигналов, установленные Thin, и все будет в порядке.

person simonmenke    schedule 02.02.2012

Я собрал небольшой однострочный код, который находит идентификаторы процессов и убивает процессы.

kill -9 `lsof -P -i :5000 | sed -n 's/python *\([0-9]*\).*\:5000.*/\1/p'`

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

person Srđan Stanić    schedule 20.12.2012