6

Rubyでチェックシステムを実装しています。さまざまなテストで実行可能ファイルを実行します。解決策が正しくない場合、特定の難しいテストが完了するまでに永遠にかかる可能性があります。そのため、実行時間を 5 秒に制限したいと考えています。

system() 関数を使用して実行可能ファイルを実行しています。

system("./solution");

.NET には優れたWaitForExit()メソッドがありますが、Ruby はどうでしょうか。

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

ありがとう

4

2 に答える 2

13

次のように、標準のタイムアウト ライブラリを使用できます。

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

これにより、同期エラーについて心配する必要がなくなります。

于 2011-01-01T14:04:06.373 に答える
4

「./solution」を実行する子供をフォークし、スリープし、完了したかどうかを確認し、そうでない場合は殺します。これで始められるはずです。

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

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

于 2011-01-01T12:48:17.940 に答える