【问题标题】:how to stop sinatra from running?如何阻止 sinatra 运行?
【发布时间】:2017-11-11 17:39:42
【问题描述】:

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

我需要将其合并到 Rake 任务或终端中。

【问题讨论】:

  • sinatra 从不运行。她的靴子是为步行而设计的......

标签: ruby sinatra


【解决方案1】:

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

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

当你想杀死它时,在 shell 中执行此操作:

kill <pid>

其中&lt;pid&gt; 是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')

【讨论】:

  • 谢谢,特别是我正在使用的最后一个代码。我需要为 Process.kill 'TERM', File.read('myapp.pid').to_i 转换为 int
【解决方案2】:

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

$ killall ruby

每个 ruby​​ 进程都会停止。西纳特拉也是。

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

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

【讨论】:

    【解决方案3】:

    简单的方法:

    kill #{Process.pid}
    

    【讨论】:

      【解决方案4】:

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

      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. 您可以使用临时文件而不是使用环境变量 ($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)
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        • 2012-10-18
        相关资源
        最近更新 更多