Кнопка остановки RubyMine создает зомби-серверы Puma в приложении Rails - PullRequest
0 голосов
/ 13 октября 2018

Смежные вопросы / проблемы, не относящиеся непосредственно к этой проблеме

Технические характеристики

  • Windows 10 (10.0.17134 Build 17134 с обновлением функций 1803) под управлением Ubuntu 18.04.1 LTS через подсистему Windows для Linux
  • RubyMine 2018.2.3
  • Puma 3.12.0
  • Rails 5.1.4
  • Ruby 2.5.1p57

Issue

Запуск среды разработки с зеленой стрелкой запуска в RubyMine запускает сервер Puma, как и ожидалось.Журнал консоли сервера показывает:

]0;Ubuntu^Z
=> Booting Puma
=> Rails 5.1.4 application starting in development
=> Run `rails server -h` for more startup options
[2331] Puma starting in cluster mode...
[2331] * Version 3.9.1 (ruby 2.5.1-p57), codename: Private Caller
[2331] * Min threads: 5, max threads: 5
[2331] * Environment: development
[2331] * Process workers: 2
[2331] * Preloading application
[2331] * Listening on tcp://127.0.0.1:3000
[2331] Use Ctrl-C to stop
[2331] - Worker 0 (pid: 2339) booted, phase: 0
[2331] - Worker 1 (pid: 2343) booted, phase: 0

(Не уверен, что со сломанными символами вокруг Ubuntu вверху, но это еще одна проблема ...)

Я могу контролировать сервер, выдавкоманда ps aux | grep puma в консоли.Вывод выглядит следующим образом:

samort7   2456 16.9  0.3 430504 66420 tty5     Sl   23:58   0:05 puma 3.9.1 (tcp://127.0.0.1:3000) [rails-sample-app]
samort7   2464  1.6  0.3 849172 54052 tty5     Sl   23:58   0:00 puma: cluster worker 0: 2456 [rails-sample-app]
samort7   2468  1.5  0.3 849176 54052 tty5     Sl   23:58   0:00 puma: cluster worker 1: 2456 [rails-sample-app]
samort7   2493  0.0  0.0  14804  1200 tty4     S    23:59   0:00 grep --color=auto puma

Нажатие на красную кнопку «Стоп» в IntelliJ вызывает появление этой строки в журнале консоли сервера:

Process finished with exit code 1

Однако, выполнение ps aux| grep puma снова показывает, что сервер puma все еще работает:

samort7   2464  0.2  0.3 849172 54340 ?        Sl   Oct12   0:00 puma: cluster worker 0: 2456 [rails-sample-app]
samort7   2468  0.2  0.3 849176 54332 ?        Sl   Oct12   0:00 puma: cluster worker 1: 2456 [rails-sample-app]
samort7   2505  0.0  0.0  14804  1200 tty4     S    00:01   0:00 grep --color=auto puma

Повторное нажатие кнопки «Пуск» и «Остановка» приведет к созданию все большего числа процессов зомби.Эти процессы можно убить, введя команду pkill -9 -f puma, но это не так, как было бы идеально, и это отрицательно сказывается на цели кнопки останова.

Ожидаемый результат

Запуск сервера непосредственно из терминалас помощью rails s -b 127.0.0.1 -p 3000 запускает сервер, как и прежде, а затем нажатие Ctrl + C дает следующий вывод и не создает зомби-процессы:

[2688] - Gracefully shutting down workers...
[2688] === puma shutdown: 2018-10-13 00:12:00 -0400 ===
[2688] - Goodbye!
Exiting

Анализ

Согласно документации RubyMine , нажатие кнопки остановки:

вызывает soft kill , позволяя приложению перехватить событие SIGINTи выполнить постепенное завершение (в Windows эмулируется событие Ctrl + C ).

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

Я также заметил, что если я закрою все окна терминала как внутри, так и снаружи RubyMine,затем откройте новое окно терминала, процессы зомби прекратились.

Вопрос

Как заставить RubyMine выдавать правильный сигнал SIGINT после нажатия красной кнопки остановки, чтобы Pumaсервер может быть корректно выключен без создания процессов-зомби?

Для справки, я сталкиваюсь с этой проблемой в этом коммите моей кодовой базы (глава из Учебное пособие Rails Майкла Хартла ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...