Lsofコマンドの出力がわかりません。
私が書くとき
lsof -p PID
私は4行を取得し、私が書くとき
lsof | grep PID
何百行も表示されます。
同じ結果を返すべきではありませんか?
ご回答ありがとうございます。こちらが出力です。それはサブプロセスのように見えますか、またはこのタスクはどういう意味ですか?
lsof -p 29076
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Java 29076 pr cwd unknown /proc/29076/cwd (readlink: Permission denied)
Java 29076 pr rtd unknown /proc/29076/root (readlink: Permission denied)
Java 29076 pr txt unknown /proc/29076/exe (readlink: Permission denied)
Java 29076 pr NOFD /proc/29076/fd (opendir: Permission denied)
lsof |grep 29076|head -20
Java 29076 pr cwd unknown /proc/29076/cwd (readlink: Permission denied)
Java 29076 pr rtd unknown /proc/29076/root (readlink: Permission denied)
Java 29076 pr txt unknown /proc/29076/exe (readlink: Permission denied)
Java 29076 pr NOFD /proc/29076/fd (opendir: Permission denied)
Java 29076 300 pr cwd unknown /proc/29076/task/300/cwd (readlink: Permission denied)
Java 29076 300 pr rtd unknown /proc/29076/task/300/root (readlink: Permission denied)
Java 29076 300 pr txt unknown /proc/29076/task/300/exe (readlink: Permission denied)
Java 29076 300 pr NOFD /proc/29076/task/300/fd (opendir: Permission denied)
Java 29076 329 pr cwd unknown /proc/29076/task/329/cwd (readlink: Permission denied)
Java 29076 329 pr rtd unknown /proc/29076/task/329/root (readlink: Permission denied)
Java 29076 329 pr txt unknown /proc/29076/task/329/exe (readlink: Permission denied)
Java 29076 329 pr NOFD /proc/29076/task/329/fd (opendir: Permission denied)
Java 29076 330 pr cwd unknown /proc/29076/task/330/cwd (readlink: Permission denied)
Java 29076 330 pr rtd unknown /proc/29076/task/330/root (readlink: Permission denied)
Java 29076 330 pr txt unknown /proc/29076/task/330/exe (readlink: Permission denied)
Java 29076 330 pr NOFD /proc/29076/task/330/fd (opendir: Permission denied)
Java 29076 331 pr cwd unknown /proc/29076/task/331/cwd (readlink: Permission denied)
Java 29076 331 pr rtd unknown /proc/29076/task/331/root (readlink: Permission denied)
Java 29076 331 pr txt unknown /proc/29076/task/331/exe (readlink: Permission denied)
Java 29076 331 pr NOFD /proc/29076/task/331/fd (opendir: Permission denied)
実際の出力を確認しないと、何が起こっているのか正確に言うのは困難ですが、lsof -p PID
コマンドがlsof | grep PID
「PID」が行の任意の場所にある行を印刷しています。たとえば、PID = 123を検索している場合、grep
オプションは、PIDの1231、1232、1233などの行と、123を含むフォルダにあるファイルも出力します。フルパス。
編集:特定の例では、lsof
がスレッドによって開かれたファイルを無視しているという違いがあります。 grep
の例の出力を見ると、3番目の列は「TID」またはスレッドIDです。 TIDのない行は、-p
オプションを使用したときに表示されていたものと一致します。 TIDを持つ行(つまり、他のスレッドによって開かれた行)は追加です。
lsof-開いているファイルを一覧表示し、lsof #man lsof
のmanページを読んでみてください
lsof -p PID
は、PIDのプロセスIDに関連付けられている開いているファイルを一覧表示します。
オプションがない場合、lsofは、すべてのアクティブなプロセスに属する開いているすべてのファイルをリストします。 lsof | grep PID
を実行すると、すべてのアクティブなプロセスに属しているすべての開いているファイルが一覧表示され、PID番号にgrepされます。 PIDも同様です。
したがって、lsof | grep PID
を使用する場合は、完全なWordの一致lsof | grep -w PID
のように、PIDを正確に一致させる必要がありますが、PIDに他の子プロセスがある場合は、行数が増えます。
私のシステムでこれを試しましたが、両方のコマンドが同じリストを生成します。プロセスの状態が安定していることを確認するために、両方のコマンドを数回続けて試すことをお勧めします。 manページとあなたの出力によると、これは私が持つことができる唯一の説明です。
Lsofの一部のバージョンには、スレッドIDが含まれています。これは、出力に表示されるTID列ヘッダーによって決定できます。 lsofは各スレッドに1つずつ重複したエントリを表示する可能性があるため、このような出力はエントリの重複を引き起こします。