次のコマンドを使用して、Ruby から計算負荷の高いプログラムを実行しようとしています。
%x(heavy_program)
ただし、プログラムの実行時間を制限したい場合があります。だから私はやってみました
%x(ulimit -St #{max_time} & heavy_program)
しかし、それは失敗しているようです。Rubyの外で実行中のshシェルで試しても、「&」トリックは機能しません。
これを行うより良い方法があると確信しています...
&&
またはのいずれかを使用します;
。
%x(ulimit -St #{max_time} && heavy_program)
%x(ulimit -St #{max_time}; heavy_program)
ただし、使用ulimit
は本当に必要なものではない場合があります。次のコードを検討してください。
require 'timeout'
Timeout(max_time){ %x'heavy_program' }
ulimit
CPU 時間を制限timeout
し、合計実行時間を制限します。これは、私たち人間が通常カウントするためです。
たとえば、sleep 999999
シェル コマンドを- で実行すると、5 秒間ではulimit -St 5
なく 999999 秒間実行されます。sleep