Не удалось остановить Webrick, запущенный с помощью рэкапа

Я разрабатываю приложение Sinatra и использую «rackup» для запуска Webrick. Что я должен сделать, чтобы остановить это? Теперь я использую Ctrl+Z, и кажется, что он останавливается. Однако, когда я пытаюсь запустить его снова, он говорит, что порт уже привязан.

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

Как мне это решить?


person Alan Coromano    schedule 28.10.2012    source источник


Ответы (2)


Ctrl+Z просто "приостановит" процесс, а не завершит/убьет его.

Чтобы действительно убить его, найдите его в таблице процессов и выполните kill -9 [PID]

как:

ps auxwww | grep ruby
slivu  16244   0.0  0.5  2551140  61220 s020  R+    1:18AM   0:10.70 ruby app.rb

второй столбец (16244) — это PID.

Другой способ — «поймать» сигнал INT с помощью Ruby и явно выйти из приложения.

в вашем приложении:

Signal.trap 'INT' do
    Process.kill 9, Process.pid
end
person Community    schedule 28.10.2012

Продолжая ответ Сливу,

используйте CTRL+C, чтобы убить процесс, если вы все еще находитесь в том же терминале.

Если вы запускаете его в фоновом режиме или хотите убить с другого терминала, используйте

ps aux | grep [r]ackup | awk '{print $2}' | xargs sudo kill -9
person Community    schedule 28.10.2012
comment
@slivu, это просто неправда, как CTRL+C работает в рельсах с сервером webrick, который вы пропустили - person Viren; 28.10.2012
comment
Rails делает тот же трюк, который я показываю здесь — перехватывает сигнал и закрывает приложение. простое приложение, поддерживаемое WEBRick, не может быть остановлено CTRL-C - person ; 28.10.2012
comment
pkill -9 стойка короче. - person Catnapper; 29.10.2012