-p $PID
on を使用すると、lsof
プロセスの直接スレッドのみが取得されます。スレッドとlsofを効果的に使用する理由と方法は何ですか?
sudo lsof -p 5344 > lsof-p5344.log
sudo lsof | grep '\<5344\>' > lsofgrep5344.log
$ wc -l lsof*5344.log
1,120,208 lsofgrep5344.log
2,166 lsof-p5344.log
これは正確なプロセスのラインです。これはいいえ子プロセスについて。ここでは、awk
出力フィールド2(lsof出力の2番目の列)をフィルタリングするために正確にプロセスPID番号を使用しています。
$ cat lsof-p5344.log | awk '{print $2}' | grep '^5344$' | wc -l
2,165
$ cat lsofgrep5344.log | awk '{print $2}' | grep '^5344$' | wc -l
1,120,207
最初の列「COMMAND」でフィルタリングすると、Javaアプリケーションの他のスレッドが表示され、1つは基本スレッドlsof -p
(例:「COMMAND = java_daemon」)のみが表示され、lsof | grep
多くのスレッド(例:「COMMAND = pool123」)が表示されます。 )、JMX、Java2D、Quartzなど」、ここで「PID」は5344に等しい)
ベストアンサー1
私のシステムにはlsof -k
スレッド番号が表示されます。ただし、リソース(ファイル、メモリマップ...)がプロセス全体に割り当てられ(あるスレッドで開かれたファイルを別のスレッドで使用できる)、スレッドマイニングは関連性がないようです。
私のLinuxシステムでは、ファイルが開くとすぐに終了するスレッドを作成します。lsof
ファイルを開いたスレッドが存在しなくても、ファイルの表示は続行されます。