我正在从我的控制器启动casperJS脚本:
output = `casperjs #{path_to_file} '#{url}#'`
有时,由于多种原因,casperjs脚本可能会挂起,或者可能需要很长时间。我想知道无论如何我都可以在我的控制器中设置超时来杀死进程并控制它。这可能吗?
答案 0 :(得分:1)
require 'timeout'
Timeout.timeout(<seconds>) do
output = `casperjs #{path_to_file} '#{url}#'`
end
如果脚本未在给定时间内完成,则会引发Timeout :: Error异常
编辑(在超时后终止进程)
require 'timeout'
pipe_cmd_in, pipe_cmd_out = IO.pipe
pid = Process.spawn("casperjs #{path_to_file} '#{url}#'", :out => pipe_cmd_out, :err => pipe_cmd_out)
Timeout.timeout(<seconds>) do
Process.wait(pid)
pipe_cmd_out.close
output = pipe_cmd_in.read;
end
rescue Timeout::Error
Process.kill('TERM', pid)
end
同时查看teminator gem。如果您有许多系统调用来处理
,这将有所帮助