如何阻止sinatra跑步?

时间:2010-07-07 17:31:27

标签: ruby sinatra

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

我需要将其纳入Rake任务或终端。

4 个答案:

答案 0 :(得分:21)

在myapp.rb中,在sinatra开始之前添加:

puts "This is process #{Process.pid}"

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

kill <pid>

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

Process.kill 'TERM', <pid>

这两个都会让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')

答案 1 :(得分:13)

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

$ killall ruby

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

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

$ ps aux | grep ruby
$ kill <ruby-process-id>

答案 2 :(得分:0)

这样做的简单方法:

kill #{Process.pid}

答案 3 :(得分:0)

要以简单的可重复方式执行此操作,有几种方法。

  1. 在启动Sinatra服务器时记录PID,例如

    # Run the Sinatra server and send it to background (using &)
    ruby my_sinatra_server.rb &
    
    # Record the PID of the last background process (using $!)
    MY_SINATRA_SERVER_PID=$!
    
    # Now go ahead and do your stuff...
    
    # When finished, kill the sinatra server (from the same shell)
    kill $MY_SINATRA_SERVER_PID
    
  2. 您可以使用临时文件,例如,不使用env变量($MY_SINATRA_SERVER)。 my_sinatra_server.pid

    # Run the Sinatra server and send it to background (using &)
    ruby my_sinatra_server.rb &
    
    # Record the PID of the last background process (using $!)
    echo $! > my_sinatra_server.pid
    
    # Now go ahead and do your stuff...
    
    # When finished, kill the sinatra server (from the same shell)
    kill $(< my_sinatra_server.pid)