我想在有限的時間內通過ruby運行二進制文件。在我的情況下,其airodump-ng
與完整的命令:如何在有限的時間內通過ruby執行二進制文件?
對於誰不知道airdump-ng
正常啓動,不會終止自己的人。它的運行永遠如果用戶沒有按下Strg + C來停止它。這在bash中不是問題,但是通過ruby執行它會導致嚴重的麻煩。有沒有辦法限制system
方法運行二進制文件的時間?
我想在有限的時間內通過ruby運行二進制文件。在我的情況下,其airodump-ng
與完整的命令:如何在有限的時間內通過ruby執行二進制文件?
對於誰不知道airdump-ng
正常啓動,不會終止自己的人。它的運行永遠如果用戶沒有按下Strg + C來停止它。這在bash中不是問題,但是通過ruby執行它會導致嚴重的麻煩。有沒有辦法限制system
方法運行二進制文件的時間?
嘗試超時庫:
require 'timeout'
begin
Timeout.timeout(30) do
system('airodump-ng -c <mychan> mon0 --essid "my_wlan" --write capture')
end
rescue Timeout::Error
# timeout
end
你可以使用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)
啊,你到了那裏第一! :)我會刪除我的重複答案。 – SteveTurczyn
謝謝,這在理論上有效。我測試了它,並在ruby源文件中解決了'Timeout :: Error'錯誤。但是這並沒有阻止airdump-ng進一步運行。我所能做的就是殺死救援塊中的過程,但那不是我夢想中的解決方案...... – davidb
我不確定它是否是一個完美的解決方案,但是您可以使用'pid = Process.spawn('airodump- ng -c mon0 --essid「my_wlan」--write capture')'。這會給你處理PID。你可以用'Process.kill('TERM',pid)'來殺死它' –