Смежные вопросы / проблемы, не относящиеся непосредственно к этой проблеме
Технические характеристики
- 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 Майкла Хартла ).