2015-04-28 33 views
0

我想在有限的時間內通過ruby運行二進制文件。在我的情況下,其airodump-ng與完整的命令:如何在有限的時間內通過ruby執行二進制文件?

對於誰不知道airdump-ng正常啓動,不會終止自己的人。它的運行永遠如果用戶沒有按下Strg + C來停止它。這在bash中不是問題,但是通過ruby執行它會導致嚴重的麻煩。有沒有辦法限制system方法運行二進制文件的時間?

回答

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 
+0

啊,你到了那裏第一! :)我會刪除我的重複答案。 – SteveTurczyn

+0

謝謝,這在理論上有效。我測試了它,並在ruby源文件中解決了'Timeout :: Error'錯誤。但是這並沒有阻止airdump-ng進一步運行。我所能做的就是殺死救援塊中的過程,但那不是我夢想中的解決方案...... – davidb

+0

我不確定它是否是一個完美的解決方案,但是您可以使用'pid = Process.spawn('airodump- ng -c mon0 --essid「my_wl​​an」--write capture')'。這會給你處理PID。你可以用'Process.kill('TERM',pid)'來殺死它' –

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) 
相關問題