如何在Xubuntu中从终端停止Ruby WEBrick应用程序

时间:2012-04-09 15:42:45

标签: ruby bash terminal webrick xubuntu

我开始学习Ruby。我尝试使用WEBrick服务器。 ruby index.rb命令服务器启动后。以及如何阻止它?我尝试了Ctrl + c,Ctrl + X等。它仍然有效。然后我按下Ctrl + Z. Bash说:[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'

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>& 
}

1 个答案:

答案 0 :(得分: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