lsof -p PID vs lsof | grep PID


12

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)

回答:


7

実際の出力を見ることなく、何が起こっているのか正確に言うことは難しいですが、lsof -p PIDコマンドが指定されたPIDによって開かれているファイルを印刷している間に、lsof | grep PID「PID」が行のどこかにあります。たとえば、PID = 123を検索する場合、grepオプションは、PIDの1231、1232、1233などの行と、フルパスのどこかに123があるフォルダーにあるファイルも印刷します。

編集:あなたの特定の例の違いはlsof、スレッドによって開かれたファイルを無視することです。このgrep例の出力を見ると、3番目の列は「TID」またはスレッドIDです。TIDのない行は、-pオプションを使用したときに表示されていたものと一致します。TIDを持つ行(つまり、他のスレッドによって開かれた行)は追加です。


実際、TIDはマニュアルページでは「タスクID番号」と呼ばれ、必ずしもスレッドIDとは限りません。
ミルジェンミック

2

lsof-開いているファイルをリストし、lsofのmanページを読み込もう #man lsof

lsof -p PID PIDのプロセスIDに関連付けられた開いているファイルをリストします。

オプションがない場合、lsofはすべてのアクティブなプロセスに属するすべての開いているファイルをリストします。実行するとlsof | grep PID、すべてのアクティブなプロセスに属するすべての開いているファイルがリストされ、PID番号がgrepさ​​れます。これは、PID自体とどこでも一致できます。など。

したがって、使用するlsof | grep PID場合は、フルワードマッチのようにPIDを正確に一致させる必要がありますが、PIDにlsof | grep -w PID他の子プロセスがある場合は、さらに多くの行が発生します。


0

私のシステムでこれを試しましたが、両方のコマンドが同じリストを生成します。プロセスの状態が安定していることを確認するために、両方のコマンドを数回連続して試すことをお勧めします。マニュアルページとあなたの出力によると、これは私が持つことができる唯一の説明です。


0

lsofの一部のバージョンには、スレッドIDが含まれています。これは、出力で明らかなTID列ヘッダーによって判断できます。lsofはスレッドごとに重複したエントリを表示する可能性があるため、このような出力ではエントリの重複が発生します。

https://support.datastax.com/hc/en-us/articles/209826153-lsof-shows-Cassandra-is-holding-a-large-amount-of-files-open

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.