タイムアウト、破損した水道管、トイレ

タイムアウト、破損した水道管、トイレ

いくつかのストレス低減プログラムを素早くベンチマークしてみたいと思いました。たとえば、gz の場合は、次のコマンドを実行します。

timeout 10 zcat foo.gz | wc -c

これは、圧縮解除器が10秒以内に抽出できるデータ量を測定します。

唯一の問題は動作しないことです。 zcatが終了すると、wcも終了するため、バイト数を取得できず、メッセージのみが表示されますTerminated

したがって、質問は次のようになります。wcでカウントを取得する方法はありますか?、何らかの方法で信号をブロックしたり、信号という用語を受け取ったりしても、結果を印刷するwcの代わりを使用します。


もちろん他のオプションもあります:

  1. 一時ファイルへの書き込み:
    timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x この問題は、多くのメモリを使用し、パフォーマンスが低下する可能性があることです。

  2. 代わりにulimitを使用してください。
    ulimit -t 10; zcat foo.gz | wc -c
    この方法も機能しますが、CPU時間だけを測定するため、I / Oによる速度低下を測定しません(たとえば、圧縮が悪く、ディスクからより多くのバイトを読み取る必要があるため)。

  3. より小さなテストファイルを作成する:
    これは間違いなくうまくいき、おそらく最高の解決策でしょう。ただし、これにより多数の一時ファイルが生成されます。

ベストアンサー1

timeout コマンドをサブシェルに入れて、成功させることができます。

( timeout 10 <command> || true ) | wc -c

おすすめ記事