いくつかのストレス低減プログラムを素早くベンチマークしてみたいと思いました。たとえば、gz の場合は、次のコマンドを実行します。
timeout 10 zcat foo.gz | wc -c
これは、圧縮解除器が10秒以内に抽出できるデータ量を測定します。
唯一の問題は動作しないことです。 zcatが終了すると、wcも終了するため、バイト数を取得できず、メッセージのみが表示されますTerminated
。
したがって、質問は次のようになります。wcでカウントを取得する方法はありますか?、何らかの方法で信号をブロックしたり、信号という用語を受け取ったりしても、結果を印刷するwcの代わりを使用します。
もちろん他のオプションもあります:
一時ファイルへの書き込み:
timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x
この問題は、多くのメモリを使用し、パフォーマンスが低下する可能性があることです。代わりにulimitを使用してください。
ulimit -t 10; zcat foo.gz | wc -c
この方法も機能しますが、CPU時間だけを測定するため、I / Oによる速度低下を測定しません(たとえば、圧縮が悪く、ディスクからより多くのバイトを読み取る必要があるため)。より小さなテストファイルを作成する:
これは間違いなくうまくいき、おそらく最高の解決策でしょう。ただし、これにより多数の一時ファイルが生成されます。
ベストアンサー1
timeout コマンドをサブシェルに入れて、成功させることができます。
( timeout 10 <command> || true ) | wc -c