как остановить синатру от бега? - PullRequest
14 голосов
/ 07 июля 2010

Если ruby myapp.rb начинает предварительный просмотр sinatra на localhost: 4567, как я могу программно остановить / остановить / убить его?Терминальная команда (кроме Ctrl-C) или Rake-задачи будут в порядке.

Мне нужно включить это в задачу или терминал Rake.

Ответы [ 4 ]

21 голосов
/ 07 июля 2010

В myapp.rb добавьте это до запуска sinatra:

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

Если вы хотите убить его, сделайте это в оболочке:

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')
13 голосов
/ 05 сентября 2012

В OS X из командной строки (Terminal.app или DTerm) просто введите:

$ killall ruby

каждый процесс ruby ​​будет остановлен.Синатра тоже.

В Linux (и других UNIX) вы можете:

$ ps aux | grep ruby
$ kill <ruby-process-id>
0 голосов
/ 11 ноября 2017

Чтобы сделать это простым повторяемым способом, есть несколько методов.

  1. Запишите PID при запуске сервера Sinatra, например,

    # 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)
    
0 голосов
/ 16 февраля 2017

Простой способ сделать это:

kill #{Process.pid}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...