0

我正在从我的控制器启动 casperJS 脚本,如下所示:

output = `casperjs #{path_to_file} '#{url}#'`

有时,由于多种原因,casperjs 脚本可能会挂起,或者可能需要很长时间。我想知道是否无论如何我可以在我的控制器中设置一个超时来杀死进程并控制它。那可能吗?

4

1 回答 1

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

看看终结者宝石。如果您有许多系统调用要处理,这将有所帮助

于 2013-10-23T20:13:33.870 回答