2012-09-17 10 views
11

私は、サーバーで実行中のプロセスのインスタンスを30個持っており、分析のためにプロセスごとにオープンファイルを記録します。lsofはpidのセットに対してすべてのオープンファイルを提供する必要があります

* ps auwwx | grep PROG_NAME | awk '{print $2}' | xargs lsof -p | less 

それからの苦情、「lsofを::上のステータスエラー:そのようなファイルやディレクトリ」私はlsof -p <pid>を実行する場合

しかし、それは私に与え

は、私は、次のコマンドを実行しましたそのプロセスの開いているファイルのリストFreeBSDマシン上のプロセスの30個すべてのインスタンスに対して、開いているすべてのファイルのリストを取得するにはどうしたらいいですか?

また、私は共有ライブラリをリストしたくありません。 -d "^txt"を実行すると、表示されたい他のdbファイルが表示されません。 .soファイルをgrepする他の方法はありますか?

+0

:特定のパターンにマッチするコマンドから開いているすべてのファイルを一覧表示するlsof -cを使用し、私は同様の問題を解決したかった - 開いているファイルの数を数えますプロセスあたり、特にJava。私はこれをこうしました: 'pgrep java | xargs -I {} bash -c 'printf {}; lsof -p {} | wc -l'' –

答えて

14

lsof -pオプションは、コンマで区切られたPIDのリストを取ります。 xargsを使用している方法では、pidを別々の引数として渡し、いくつかをファイル名として解釈します。

お試しlsof -p $(your grep | tr '\012' ,)これは末尾にカンマがあるとわかりますが、lsofが気になるのかどうかはわかりませんが、必要ならばsedにすることができます。

5

xargs -L1 lsof -pを使用して、lsofをpidごとに1回実行することができます。

さらに良い:インターネット通行人のためのFYI

lsof -c bas # list all processes with commands starting with 'bas' 
lsof -c '/ash$/x' # list all commands ending with 'ash' (regexp syntax) 
関連する問題