Todos os arquivos abertos são exibidos na saída lsof?

2

Em todos os casos, descobri que qualquer arquivo aberto para leitura ou escrita é exibido na saída lsof. Mas hoje, estou tentando localizar um arquivo de log que é aberto para gravação por um processo java na saída lsof. Mas não consigo encontrá-lo na saída. Mas o arquivo de log está ativo e está sendo atualizado.

Os arquivos abertos por java ou python etc. não serão exibidos na saída lsof?

FYI,

# 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

EDIT 1: Depois de ler este lsof não retorna arquivos abertos pelo mesmo usuário , eu pensei que poderia haver um arquivo de troca criado, mas não há arquivos REG na saída lsof -p 30372 com o modo de gravação.

Além disso, não há outros processos filhos criados a partir desse processo.

Mas a saída mostra muitos arquivos, como o abaixo, aberto para gravação:

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

Eu não sei o que é eventpoll aqui, mas acho que está lendo o log do eventpoll e parece que o logfile está dividido em vários (não sei o que é) e está escrevendo. É como se vários processos estivessem lendo eventos e escrevendo no mesmo arquivo de alguma forma que eu realmente não sei.

    
por GP92 11.09.2016 / 15:46

1 resposta

-2

Os arquivos abertos pelos programas são visíveis nas estruturas de dados do kernel usadas por lsof , os dados são armazenados internamente e o sistema de arquivos só é forçado a estar atualizado quando o programa fecha o arquivo.

PIPE s é usado para passar dados de um processo para outro, fundamental para UNIX / Linux / * BSD /...

eventpoll s são usados para sincronização, monitorando várias fontes de dados (por exemplo, teclado e atividade de rede).

Comece com

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

E leia essas man páginas.

Você não está em um labirinto de pequenas passagens sinuosas, todas iguais. Parece apenas isso.

Por favor, leia o post Como fazer uma boa pergunta.

    
por 11.09.2016 / 18:32