2012-04-09 6 views
2

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

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

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

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

P.S. Приложение очень простое (из 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>& 
} 

ответ

4

Вы всегда можете убить свой процесс, указав 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!

+0

Но ловушка должна быть после монтирования сервера, и она будет работать ... Спасибо. –