SEQuenceの進捗状況のモニタリング

SEQuenceの進捗状況のモニタリング

3日以上実行された次のスクリプトがあります。

seq -w 1 1000000 | while read i; do (./myscript.pl $i >> output.txt); done

シーケンスがどれくらい進んだのかわかりますか?

答え1

要素ごとに異なるパラメータを使用してコマンドを呼び出すので、そのコマンドが現在どのパラメータを処理しているかを確認してください。

ps w -C myscript.pl

writeプロセスが実行しているシステムコールの数を確認して、おおよその値を取得できますseqpgrep seq(または他のコマンド、たとえばps uw -C seq複数のプロセスがあり、seq必要なプロセスを識別する必要がある場合)を使用してプロセスIDを見つけます。 PIDが1234あれば

grep syscw /proc/1234/io

プロセスの一部のIO統計を読んでください。/proc1. この値に1²を加え、getconf PIPE_BUF /4096を掛けて書き込んだバイト数を取得しますseq。これまでに書いたすべての数字の合計長さです。同じ幅の行を印刷しようとしているので、8で割ってこれまでに書かれた数字を取得します。

どのくらいの距離を移動したかを確認するseqより便利な方法は次のとおりです。システムコールの追跡strace。 Ubuntuでは、これを行うにはデフォルトでrootが必要です。

$ strace -p1234
strace: Process 1234 attached
write(1, "0008193\n0008194\n0008195\n0008196\n"..., 4096^Cstrace: Process 1234 detached

上記の例では、seq読み取り側で8192処理を完了し、より多くのデータを処理する準備が整ったら、8193がパイプに書き込まれる次の番号です。

1一般ファイルが記録されている場合、またははファイルのオフセット、つまり記録されたバイト数を表示します。ただし、パイプを使用するとこの情報を取得できません。seqcat /proc/1234/1/fdinfolsof -p1234seq
²実験によって決定されました。なぜ最初の書き込み操作が2回記録されるのかわかりませんPIPE_BUF

答え2

あなたのスクリプトが何をしているのかわかりませんが、watch cat output.txt他の端末で出力ファイルがどのように見えるかを監視できますか?

または(これはあなたが要求したものではないことを知っています)、次のようにコマンドを実行することもできます。

seq -w 1 1000000 | while read i; do (./myscript.pl $i >> output.txt & echo i); done

または

seq -w 1 1000000 | while read i; do (./myscript.pl $i tee -a output.txt); done

答え3

使用pvパイプビューユーティリティ:

seq -w 1 1000000 | pv -lcs 1M | 
while read i; do (./myscript.pl $i >> output.txt); done

...次のように出力されます。標準エラーエラー率読み取られた行の数と完了した行の現在の割合を示す継続的に更新される進行状況バー。

関連情報