如何在rake task
内启动线程,然后在任务完成后终止胎面。
本质上,我正在编写一个rake task
来测试一个 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
的方法,但请发表评论,因为这个问题专门询问线程和耙子任务。
你想要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
有一个命令行选项在前台运行,最好使用它,否则如果它自我守护,你需要知道它存储其PID文件的位置,以便识别和杀死守护程序。