Şu anda hangi dosyanın bir işlem tarafından yazıldığını bulma


9

Benim durumum, zaman zaman belirli bir sürecin (bu durumda Thunderbird) kullanıcı girişine bir dakika kadar tepki vermemesidir. Bunu iotopbu süre boyunca kullanarak öğrendim , diske çok yazıyor ve şimdi hangi dosyaya yazdığını bulmak istiyorum, ama ne yazık ki iotopaçık dosya (-descriptor) başına sadece işlem başına istatistik verir.

lsofSürecin şu anda hangi dosyaları açtığını bulmak için kullanabileceğimi biliyorum , ancak elbette Thunderbird'de çok fazla açık var, bu yüzden bu yararlı değil. iostatyalnızca cihaz başına istatistikleri gösterir.

Sorun sadece rastgele oluşur ve görünmesi oldukça zaman alabilir, bu yüzden umarım Thunderbird'ü zorlamak ve hangi dosyanın en çok yazdığını bulmak için uzun günlüklerde dolaşmak zorunda değilim.


Yanıtlar:


6

Askıya alma işlemine tam olarak asıldığında eklerseniz (pid'i alabilir ve komutu önceden, yedek bir terminalde sıralayabilirsiniz), engelleme yazma işleminin dosya tanımlayıcısını gösterir.

Önemsiz örnek:

$ mkfifo tmp
$ cat /dev/urandom > tmp &
[1] 636226
  # this will block on open until someone opens for reading

$ exec 4<tmp
  # now it should be blocked trying to write

$ strace -p 636226
Process 636226 attached - interrupt to quit
write(1, "L!\f\335\330\27\374\360\212\244c\326\0\356j\374`\310C\30Z\362W\307\365Rv\244?o\225N"..., 4096 <unfinished ...>
^C
Process 636226 detached

Teşekkürler, süreç çalışırken strace ekleyebileceğimi bilmiyordum. Bunu deneyeceğim.
Philipp Wendler

1
lsof -p $PIDDosya tanımlayıcısının nereye işaret ettiğini bilmek için bu bilgileri ile geçebilirsiniz
Coren

1
veya ls -l /proc/pid/fdLinux'ta
Yararsız

Strace kullanarak aslında tam olarak ne bilmek istediğimi bulabilirdim, bu yüzden tekrar teşekkürler!
Philipp Wendler

2

Kök erişiminiz var, bence en iyi araç denetim alt sistemi olacaktır . Bu konuda çok fazla literatür yoktur (ancak logf'lardan daha fazlası); bu eğiticiyle ya da birkaç örnekle ya da sadece auditctlman sayfasından başlayabilirsiniz . Burada, arka plan programının başlatıldığından emin olmak ve daha sonra auditctlkök olarak çalıştırmak yeterli olmalıdır :

auditctl -a exit,always -F pid=1234 -F dir=/home/philipp

Bu, /var/log/audit/audit.logpid 1234 ile işlemin altında bir yere yazdığı her seferinde günlüklere yazacaktır /home/philipp. Tepegöz oldukça küçük, çok daha küçük strace.


Denetim alt sistemlerine strace'ye ilginç bir alternatif olarak işaret ettiğiniz için teşekkür ederiz. Ancak, burada sadece dosya açıldığında günlükleri görünüyor gibi görünmüyor ve böylece her dosyaya ne kadar yazıldığını bulamıyorum.
Philipp Wendler

@PhilippWendler Ah. Hmmm. -S read -S writeEklemeyi deneyin (denenmemiş).
Gilles 'SO- kötü olmayı bırak'
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.