如果ruby myapp.rb
在localhost:4567啓動sinatra預覽,我該如何以編程方式停止/暫停/殺死它?終端命令(Ctrl-C除外)或Rake任務都可以。如何阻止sinatra運行?
我需要將其納入Rake任務或終端。
如果ruby myapp.rb
在localhost:4567啓動sinatra預覽,我該如何以編程方式停止/暫停/殺死它?終端命令(Ctrl-C除外)或Rake任務都可以。如何阻止sinatra運行?
我需要將其納入Rake任務或終端。
在myapp.rb,添加此西納特拉開始之前:
puts "This is process #{Process.pid}"
當你想殺死它,在外殼做到這一點:
kill <pid>
凡<pid>
的數量由MYAPP輸出.RB。如果你想用紅寶石做:
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 – 2010-07-08 00:49:33
在OS X,從命令行(Terminal.app,或DTERM)只需輸入:
$ killall ruby
每紅寶石過程將停止。西納特拉也是。
在Linux(和其他UNIX系統),您可以:
$ ps aux | grep ruby
$ kill <ruby-process-id>
'killall ruby'也可以在Linux中運行 – 2015-06-20 16:41:06
的simples辦法做到這一點:
kill #{Process.pid}
以簡單重複的方式做到這一點,有幾個方法。
記錄啓動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
代替使用環境變量($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)
西納特拉*從未*運行。她的靴子是爲*行走而設計的。* – Shog9 2010-07-07 17:34:34