time、timeout、ulimit コマンドを正しく使用してください。

time、timeout、ulimit コマンドを正しく使用してください。

CentOSでコマンドを実行しており、同時に2つのことをしたいと思います。

  1. コマンドの実行時間をファイルに書き込みます。
  2. 停止コマンドのタイムアウト設定

最初の実装を正常に実装しました。次のようになります。

(time ./minisat+_64-bit_static opb_clauses.txt ) 2>>../measures.txt

ご覧のとおり、timeコマンドを使用してコマンドにかかる時間を計算し、時間の結果をファイルに渡しますmeasures.txt。例は次のとおりですmeasures.txt

real    0m0.002s
user    0m0.000s
sys 0m0.000s

次の2番目の項目を追加しようとしています。

(timeout 1s time ./minisat+_64-bit_static opb_clauses.txt ) 2>>../measures.txt

このコマンドの結果は、私のファイルを混乱させ、次のような結果を返します。

0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 6368maxresident)k
0inputs+0outputs (0major+440minor)pagefaults 0swaps

ご覧のとおり、「リアルタイム」の結果は何とか消え、他の結果は別の形式でした。timeコマンドの結果とを区別する方法はtimeout

編集:2番目のアイデアは、タイムアウトの代わりにulimitコマンドを使用することです。私は同じことを試しましたが、ulimitを使用しました。

 (ulimit -t 10 time ./minisat+_64-bit_static opb_clauses.txt ) 2>>../measures.txt

しかし、今回はMeasures.txtに結果が記録されませんでした。

答え1

同じ例を試してみると、期待した結果が出てくるので、環境に問題があるようです。たとえば、

# command #1
$ (time echo "hi") 2>> measures.txt
hi

$ cat measures.txt 

real    0m0.000s
user    0m0.000s
sys 0m0.000s

# command #2
$ (timeout 1s time echo "hi") 2>> measures.txt
hi

$ cat measures.txt 

real    0m0.000s
user    0m0.000s
sys 0m0.000s
0.00user 0.00system 0:00.05elapsed 0%CPU (0avgtext+0avgdata 552maxresident)k
56inputs+0outputs (1major+173minor)pagefaults 0swaps

コマンドを2つの別々の呼び出しで構成するのではなく、次のことを試してください。

(
 time ./minisat+_64-bit_static opb_clauses.txt
 timeout 1s time ./minisat+_64-bit_static opb_clauses.txt
) 2>>../measures.txt

関連情報