開いているすべてのファイルがlsof出力に表示されますか?

開いているすべてのファイルがlsof出力に表示されますか?

すべての場合において、読み取りまたは書き込み用に開かれたすべてのファイルがlsof出力に表示されることがわかりました。しかし、今日はlsof出力でJavaプロセスによって書かれるために開かれるログファイルを見つけようとしています。しかし、出力には見つかりません。ただし、ログファイルはアクティブで更新中です。

JavaやPythonなどで開かれたファイルはlsof出力に表示されませんか?

参考までに、

# lsof /usr/local/qftest/log/qftest.log
# lsof -p 30732 -a +d /usr/local/qftest/log
# lsof -p 30732 -a +D /usr/local/qftest/log
# lsof | grep qftest.log
# ps -p 30732 -f
  qftest 30732 1 99 Sep09 ? 6-07:37:34 java -Xbootclasspath/p:/usr/local/qftest/qftest-3.5.7/lib/endorsed/xalan.jar:/usr/local/qftest/qftest-3.5.7/lib/endorsed/xerces.jar:/usr/local/qftest/qftest-3.5.7/lib/endorsed/xml-apis.jar:/usr/local/qftest/qftest-3.5.7/lib/endorsed/serializer.jar -Dqftest.home=/usr/local/qftest -Dqftest.versionhome=/usr/local/qftest/qftest-3.5.7 -Dqftest.display= -Xmx256m -Xms16m -classpath /usr/local/qftest/qftest-3.5.7/qflib/qftest.jar:/usr/local/qftest/qftest-3.5.7/qflib/qfshared.jar:/usr/local/qftest/qftest-3.5.7/qflib/qfdemo.jar:/usr/local/qftest/qftest-3.5.7/qflib/qflog.jar:/usr/local/qftest/qftest-3.5.7/qflib/qflib.jar:/usr/local/qftest/qftest-3.5.7/lib/endorsed/serializer.jar:/usr/local/qftest/qftest-3.5.7/lib/endorsed/xml-apis.jar:/usr/local/qftest/qftest-3.5.7/lib/endorsed/xerces.jar:/usr/local/qftest/qftest-3.5.7/lib/endorsed/xalan.jar:/usr/local/qftest/qftest-3.5.7/lib/truezip.jar:/usr/local/qftest/qftest-3.5.7/lib/poi.jar:/usr/local/qftest/qftest-3.5.7/lib/netty.jar:/usr/local/qftest/qftest-3.5.7/lib/looks.jar:/usr/local/qftest/qftest-3.5.7/lib/jxl.jar:/usr/local/qftest/qftest-3.5.7/lib/junit.jar:/usr/local/qftest/qftest-3.5.7/lib/jide-oss.jar:/usr/local/qftest/qftest-3.5.7/lib/jfreechart.jar:/usr/local/qftest/qftest-3.5.7/lib/jcommon.jar:/usr/local/qftest/qftest-3.5.7/lib/commons.jar:/usr/local/qftest/qftest-3.5.7/lib/pngencoder.jar:/usr/local/qftest/qftest-3.5.7/lib/png.jar:/usr/local/qftest/qftest-3.5.7/lib/jython.jar:/usr/local/qftest/qftest-3.5.7/lib/jniwrapper.jar:/usr/local/qftest/qftest-3.5.7/lib/jline.jar:/usr/local/qftest/qftest-3.5.7/lib/jansi.jar:/usr/local/qftest/qftest-3.5.7/lib/groovy-all.jar:/usr/local/qftest/qftest-3.5.7/lib/gnu.jar:/usr/local/qftest/qftest-3.5.7/lib/bsf.jar: de.qfs.apps.qftest.start.QFTestRunner -shellarg=-c -shell=/bin/sh -options=/usr/local/qftest/qftest-3.5.7/bin/qftest.options -logfile=/usr/local/qftest/log/qftest.log -licenseserver

編集1: この記事を読んだ後lsof は、同じユーザーが開いたファイルを返しません。、スワップファイルが作成された可能性があると思いましたが、書き込みモードではlsof -p 30372出力にREGファイルがありません。

また、このプロセスでは他のサブプロセスは作成されません。

ただし、出力には、次のように書き込み用に開いている多くのファイルが表示されます。

java    30732 qftest   40r     FIFO        0,6          490757310 pipe
java    30732 qftest   41w     FIFO        0,6          490757310 pipe
java    30732 qftest   42r     0000       0,11        0 490757311 eventpoll
java    30732 qftest   43r     FIFO        0,6          490757312 pipe
java    30732 qftest   44w     FIFO        0,6          490757312 pipe
java    30732 qftest   45r     0000       0,11        0 490757313 eventpoll
java    30732 qftest   46r     FIFO        0,6          490757314 pipe
java    30732 qftest   47w     FIFO        0,6          490757314 pipe
java    30732 qftest   48r     0000       0,11        0 490757315 eventpoll

ここでeventpollが何であるかはわかりませんが、eventpollからログを読むようですが、ログファイルが複数に分割され(何かはわかりません)記録されるようです。複数のプロセスがイベントを読み取り、私が実際に知らない方法で同じファイルに書き込むのと同じです。

答え1

プログラムによって開かれたファイルは使用されたカーネルデータ構造に表示され、データは内部的にバッファリングされ、lsofファイルシステムはプログラムがファイルを閉じたときにのみ最新の状態に保たれます。

PIPEUNIX/Linux/*BSD/... の基盤となるあるプロセスから別のプロセスにデータを渡すために使用されます。

eventpoll複数のデータソース(キーボードやネットワークアクティビティなど)を同期して監視するために使用されます。

から始まる

man -k open
man -k pipe
man -k event
man -k poll
man -k select

そしてこれらのmanページを読んでください。

あなたは曲がった小さな通路の迷路にいません。すべて同じです。ただそうだ。

良い質問をする方法の記事を読んでください。

関連情報