如何在有限的时间内通过ruby执行二进制文件?

时间:2015-04-28 20:57:52

标签: ruby-on-rails ruby command

我想在有限的时间内通过ruby运行二进制文件。在我的情况下,它的airodump-ng具有完整的命令:

airodump-ng -c <mychan> mon0 --essid "my_wlan" --write capture

对于那些不了解airdump-ng正常的人,它会启动并且不会自行终止。如果用户没有通过按Strg + C来阻止它,它将永远运行。这不是bash的问题,而是通过ruby执行它会导致严重的麻烦。有没有办法限制system方法运行二进制文件的时间?

2 个答案:

答案 0 :(得分:2)

尝试超时库:

require 'timeout'

begin
  Timeout.timeout(30) do
    system('airodump-ng -c <mychan> mon0 --essid "my_wlan" --write capture')
  end
rescue Timeout::Error
  # timeout
end

答案 1 :(得分:1)

您可以使用Ruby spawn方法。来自Ruby文档:

  

此方法类似于#system,但它不会等待命令完成。

这样的事情:

# Start airodump
pid = spawn('airodump-ng -c <mychan> mon0 --essid "my_wlan" --write capture')
# Wait a little while...
sleep 60
# Then stop airodump (similar to pressing CTRL-C)
Process.kill("INT", pid)