2011-01-01 8 views
6

私はRubyで検査システムを実装しています。異なるテストで実行可能ファイルを実行します。解決策が正しくない場合は、特定のハード・テストで終了するまでに時間がかかります。だから私は実行時間を5秒に制限したいのです。5秒以上かかるとRubyでプロセスを終了するには?

私は実行可能ファイルを実行するためのシステム()関数を使用しています:

system("./solution"); 

.NETは、どのようなルビーについての素晴らしいWaitForExit()方法を、持っています?。

外部プロセスの実行時間を5秒に制限する方法はありますか?

おかげ

答えて

11

あなたはそうのように、標準のタイムアウトライブラリを使用することができます。

require 'timeout' 
Timeout::timeout(5) { system("./solution") } 

あなたは文句を言わない。この方法では、同期エラーを心配する必要があります。

+0

ありがとう、偉大な作品 – Alex

+0

EnabrenTaneのソリューションとは異なり、各テストが完了するまでに最低5秒かかるわけではないので、これを受け入れられた答えとして選択しました。私はシステム( "sudo killall solution")を使って実行中のプロセスを終了させます。 – Alex

4

フォーク「./solution」を実行するあなたの子供、睡眠のが行われた場合、それを殺していない場合は、確認してください。これはあなたを始めるはずです。

pid = Process.fork{ system("./solution")} 
sleep(5) 
Process.kill("HUP", pid) 

http://www.ruby-doc.org/core/classes/Process.html#M003153

+0

リンクありがとうございます。私はforkメソッドを使うことができます。しかし、どうすればシステム(「./解決策」)と接続できますか? – Alex

+1

@Alexが更新されました。 – EnabrenTane

+0

ありがとう!それがまさに私が必要なものです。ただ一つの問題があります。すべてのテストに5秒かかります。しかし、ほとんどのテストは1秒未満で完了します。それを修正する方法はありますか? – Alex

関連する問題