Tüm açık dosyalar lsof çıktısında mı görüntüleniyor?


2

Her durumda, okuma veya yazma için açık olan herhangi bir dosyayı lsof çıktısında görüntülendiğini buldum. Fakat bugün, bir java işleminin lsof çıktısında yazması için açılan bir log dosyası bulmaya çalışıyorum. Ama çıktıda bulamıyorum. Ancak logfile aktif ve güncellenmektedir.

Java veya python vb. İle açılan dosyalar çıktıda görünmüyor mu?

Bilginize,

# 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

DÜZENLEME 1: Bu lsof'u okuduktan sonra aynı kullanıcı tarafından açılan dosyaları döndürmez , bir takas dosyası oluşturulabileceğini düşündüm, ancak lsof -p 30372 çıkışında yazma modunda REG dosyası yok.

Ayrıca bu süreçten yaratılan başka bir alt süreç yok.

Ancak çıktı, aşağıdaki gibi yazmak için açılan pek çok dosyayı gösterir:

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

Burada eventpoll'un ne olduğunu bilmiyorum, ancak logu eventpoll'dan okuyor ve logfile birkaç bölüme ayrılıyor (ne olduğunu bilmiyorum) ve yazıyor gibi görünüyor. Birden çok işlem, olayları okumak ve aynı şekilde, gerçekten bilmediğim bir şekilde yazmak gibi.


2
Çoğaltmak için sorun yaşıyorum. Şüphem, dosyanın art arda eklenmiş, eklenmiş ve kapatılmış olması nedeniyle düşüyor. Komutun tamamını çalıştırabilir misiniz strace? örn strace java -Xbootclasspath ... -logfile=...| grep qfest.log. Bu şüphenin doğru çıkması durumunda hızlı bir open () / write () / close () yazmalıdır. Bu btw oldukça iyi bir soru.
grochmal

Haklısın. Hemen kapatıyor. [pid 8609] open("/var/logs/qftest.log", O_WRONLY|O_CREAT|O_APPEND, 0666) = 243 [pid 8609] fstat(243, {st_mode=S_IFREG|0644, st_size=6839936, ...}) = 0 [pid 8609] write(243, "7 (21:29:32.801) New I/O worker "..., 8192) = 8192 [pid 8609] write(243, "l,android=0,user=qft_UI-test103_"..., 370) = 370 [pid 8609] close(243)
GP92

Yanıtlar:


-2

Programlar tarafından açılan dosyalar lsof, kullanılan çekirdek veri yapılarında görülebilir , veriler dahili olarak tamponlanır ve dosya sistemi sadece program dosyayı kapattığında güncel olmaya zorlanır.

PIPEs bir işlemden diğerine veri aktarmak için kullanılır, UNIX / Linux / * BSD / ... için temeldir ...

eventpolls senkronizasyon, çoklu veri kaynaklarını izlemek için kullanılır (örneğin, klavye ve ağ etkinliği).

İle başla

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

Ve o mansayfaları oku .

Hepsi aynı kıvrımlı küçük pasajların labirentinde değilsiniz. Sadece öyle gözüküyor.

Lütfen İyi Bir Soru Sorma mesajını okuyun.


"veriler dahili olarak tamponlanır ve dosya sistemi yalnızca program dosyayı kapattığında güncel olmak zorunda kalır." Programın her güncellemesi gerektiğinde ve güncelleme küçük boyutlu olabileceğinden, dosyanın w modunda açılmasını mı istiyorsunuz, aksi halde çıkmamızda görebileceğimiz veya görmeyeceğimiz saniyenin bir bölümü olur mu?
GP92

Pipe ve eventpolls hakkında açıkladığınız için teşekkür ederim, bunların sadece bu özel sürece özel olduğunu düşündüm. Bu işlemlerin çoğunda görülüyor gibi görünüyor.
GP92

1
Şüphelenmiştim, poll()ancak bu yalnızca önceden açılmış olan dosya tanımlayıcılarını sorgulayabileceğinden, bu nedenle çekirdek veri yapısı yoklamadan önce güncellenmelidir. Lsof'da kapatılmış bir dosya görmeyi anlayabiliyordum (yani poll () çekirdek listesini yerinde tutardı ve lsof onu alır) ancak tersi olmaz.
grochmal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.