如何阻止sinatra跑步?

Dr.*_*ein 14 ruby sinatra

如果ruby myapp.rb在localhost:4567开始sinatra预览,我怎么能以编程方式停止/停止/杀死它?终端命令(除了Ctrl-C)或Rake任务都没问题.

我需要将它合并到Rake任务或终端中.

Adr*_*ian 21

在myapp.rb中,在sinatra启动之前添加:

puts "This is process #{Process.pid}"
Run Code Online (Sandbox Code Playgroud)

如果要杀死它,请在shell中执行此操作:

kill <pid>
Run Code Online (Sandbox Code Playgroud)

<pid>myapp.rb输出的数字在哪里.如果你想在ruby中这样做:

Process.kill 'TERM', <pid>
Run Code Online (Sandbox Code Playgroud)

这两个都将让sinatra运行它的退出例程.如果您不想每次都输入pid,请让myapp.rb打开一个文件并将其放入pid中.然后,当您想要停止它时,请阅读该文件并使用它.例:

# myapp.rb:
File.open('myapp.pid', 'w') {|f| f.write Process.pid }

# shell:
kill `cat myapp.pid`

# ruby:
Process.kill 'TERM', File.read('myapp.pid')
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,特别是最后一个代码 - 我正在使用它.我需要转换为int来处理`Process.kill'TERM',File.read('myapp.pid').to_i` (2认同)

Die*_*che 13

在OS X中,从命令行(Terminal.app或DTerm)只需输入:

$ killall ruby
Run Code Online (Sandbox Code Playgroud)

每个红宝石过程都会停止.Sinatra也是.

在Linux(和其他UNIX)中,您可以:

$ ps aux | grep ruby
$ kill <ruby-process-id>
Run Code Online (Sandbox Code Playgroud)