如何在 rake 任务
中启动一个线程,然后在任务完成时终止线程。
本质上,我正在编写一个 rake 任务
来测试一个 jekyll 站点。我希望能够启动服务器,执行一些其他任务,然后在任务完成时销毁线程。这是我到目前为止所拥有的:
task :test_site do
`ejekyll --server`
`git -Xdn`
if agree( "Clean all ignored files?")
git -Xdf
end
end
但不幸的是,我知道停止 jekyll --server
的唯一方法是使用 ctrl c
。我很高兴听到在庄园中停止 jekyll --server
的方法,它不会退出 rake 任务,但请发表评论,因为这个问题专门询问线程和 rake 任务。
最佳答案
你想要Process.spawn
,不是一个线程。它是一个新进程,而不是现有进程中的执行线程。你得到了 PID,所以只需发送 Process.kill(:QUIT, pid)
或者你想用什么方法来杀死生成的处理。
pid = Process.spawn(
"ejekyll", "--server",
out: "/dev/null",
err: "/dev/null"
)
# you may need to add a short sleep() here
# other stuff
Process.kill(:QUIT, pid) && Process.wait
如果 ejekyll
有一个在前台运行的命令行选项,最好使用它,否则如果它 self 守护,你需要知道它存储 PID 文件的位置,以便识别并杀死守护进程。
关于ruby - 用于在独立线程中运行服务器然后在任务完成时终止线程的 Rake 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10454699/