2

我开始学习 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'

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

1 回答 1

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

于 2012-04-09T16:03:00.297 回答