Linuxでは、プロセスがファイル全体でどのくらい離れているかを確認できますか?


12

次のようなパイプコマンドがある場合

   cat myfile | processor_application

processor_applicationは、処理するために、チャンク単位で標準から読み込んでいるもので、catがどこまで持っているかを見ることができますか?

おそらくlsofを使用していますか?

ありがとう!


これまでの回答ありがとうございます!ただし、もっと明確にすべきでした。コマンドは既に実行されています。
ワドウ

ああ、それからpvはそれほど便利ではありません。元の質問を編集して、より明確にすることができます。
フィルホレンバック

実際、この質問には3つのすばらしい個別の回答がありますので、そのままにしておきます。
ワドウ

1
1. pvを使用する(開始する前に)2. lsof -oを使用する(オフセットがサポートされている場合)3.猫の既知のPIDについて、/ proc / <PID> / ioのwcharの値を調べるプロセス
ワドウ

回答:


12

たとえば、pvを使用してこれを行うことができます。

pv file | processor_application

pvはstdinをstdoutに直接渡すため、catを使用する必要はありません。

プログラムが既に実行されているときに編集しcatプロセスのPIDを見つけて、次の内容を確認します。

/proc/<PID>/io

書き込みバイト数-wcharがわかります。


あなたの編集を見ただけです!これは、(i)チェーンにpvがなく、(ii)lsof -oが機能しない場合に完全に機能します。ありがとう!
ワドウ

9

絶対に!Pipe Viewerはそれを正確に行います。パイプラインに挿入するだけです:

cat myfile | pv | processor_application

cat上記の例で最適化できます:

pv myfile | processor_application

pvは入力のサイズを直接決定できるため、実際の進行状況インジケーターを提供する利点があります。パイプラインの途中でpvを使用する場合は、正確な進捗を得るために自分でファイルサイズを指定する必要があります。

input_process | pv -s 100M -p | processor_application

PVをカスタマイズするためのその他のオプションについては、Webサイトを確認してください。


pv利用可能になったときが好きです:
voretaq7

and (gdb pvを使用mkfifoしたgdb4つのシステムコール)を使用してパイプラインに挿入するのはかなり簡単pです。
user1686

@grawityあなたはそのようにからかうことはできません。本当の答えを書いてデモンストレーションしてください-私は今非常に興味があります。
フィルホレンバック

2
ハックが多すぎて答えになりませんが、ここでは。
user1686

6

プロセスがすでに実行されている場合、lsofにはsize/offset役立つ列がありますlsof -o -p [PID]。検査したいcatプロセスのPIDを見つけてください。

プロセスがまだ実行されていない場合、pv他の人が提案したように、良いオプションです(システムにそのユーティリティがあると仮定します)。


これは私が見たlsofオプションです。しかし、システムでlsof -oが許可されていない、または使用できない場合はどうなりますか?
ワドウ

-oシステムで動作しない場合は、使用に関してかなりlsofcat
おかしい

はい、両方試してみました。私はlsofが警告する理由を探しています-oは現在利用できません
...-wodow

gd.tuwien.ac.at/utils/admin-tools/lsof/FAQにミラー化されたlsof FAQは、ポイント/質問3.43.2.3でlsof -oがLinuxでは不可能であることを暗示しています!他のユーザーが-o lsofを使用しているように見えるように私は、これはオーバー広範であると仮定
wodow
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.