Как остановить приложение Ruby WEBrick из терминала в Xubuntu

Я начал изучать Ruby. Я пытался работать с сервером WEBrick. После ruby index.rb командный сервер запускается. И как это остановить? Я пробовал Ctrl+C, Ctrl+X и другие. Это все еще работает. Затем я нажал Ctrl+Z. Баш сказал: [1]+ Stopped ruby index.rb. Но процесс все еще работает, и используя мой порт, который нужен для сервера. Я могу убить его только из системного монитора.

Какая команда мне нужна пользователю в bash, чтобы убить процесс index.rb??

Когда я использую Ctrl+C, возникает ошибка:

[2012-04-09 19:44:10] ERROR Interrupt: 
/usr/lib/ruby/1.8/webrick/server.rb:91:in `select'

PS Приложение очень простое (из WikiBooks):

   require 'webrick'
server = WEBrick::HTTPServer.new(:Port=>8080)
server.mount_proc('/'){ |req, resp|
    File.open('notepad.txt', 'w'){ |f| f.write(req.query["text"]) } if req.query["text"]
    resp['Content-Type'] = 'text/html'
    resp.body = %& <html><body><center><form method="post">
        <textarea name="text" rows="4" cols="40">#{IO.read('notepad.txt')}</textarea><br/>
        <input type="submit" name="update" value="save"/>
        </form></center></body></html></nowiki>& 
}

1 ответ

Решение

Вы всегда можете убить свой процесс, указав PID.

Чтобы получить pid от вашего серверного процесса, вы можете использовать

$ ps a | grep ruby

куда PID это первый столбец, после этого использования: $ kill -9 <YOUR_PID> убить процесс.

Ваш сервер не ловит SIGINTвот почему вы не можете остановить это с Ctrl+C,

Измените свой сценарий на этот

require 'webrick'

server = WEBrick::HTTPServer.new(:Port=>8080)

trap 'INT' do server.shutdown end

server.mount_proc('/'){ |req, resp|
    File.open('notepad.txt', 'w'){ |f| f.write(req.query["text"]) } if req.query["text"]
    resp['Content-Type'] = 'text/html'
    resp.body = %& <html><body><center><form method="post">
        <textarea name="text" rows="4" cols="40">#{IO.read('notepad.txt')}</textarea><br/>
        <input type="submit" name="update" value="save"/>
        </form></center></body></html></nowiki>& 
}

server.start

И наслаждаться Ctrl+C!

Другие вопросы по тегам