linux'daki açık işlem dosyalarını izleme (gerçek zamanlı)


10

XYZ işlemi tarafından açılan dosyalar şu komutla bulunabilir:

ls -l /proc/PID/fd

tailHer x saniyede bir otomatik yenileme gibi daha etkileşimli bir şekilde yapılabilecek bir şey var mı?

Yanıtlar:


15

watchKomutu deneyin :

watch -n 10 ls -l /proc/$$/fd

Saat güzel.

Döngü sırasında eski bir okul kullanabilirsiniz:

while :
do
 ls -l /proc/$$/fd
 sleep 10
done

watcholduğu PROCPS debian tabanlı sistemlerde paket ve PROCPS RedHat rpm sistemleriyle türetildiğini.


1
sleep kendisi while döngüsünde koşul olarak kullanılabilir, bu nedenle örneğiniz daha zarif yazılabilir: while 10 uyku; ls -l / proc / $$ / fd; bitti
ipozgaj

8

Her dosyayı açıldığı sırada görmek istiyorsanız, ile filtreleyebilirsiniz strace. Örneğin:

strace -p _pid_of_app_ -e trace=open,close

2
Bu gerçekten en iyi cevap. Ben bayrakları öneriyoruz -yve -fbir kabuk içinde çalışan ayıklama şeye teşebbüs eğer. Sadece kabuk PID'sini geçirin ve -fçatalları takip edin.
Aea

4

Birleştirebilirsin lsofve watch.

Örneğin watch "lsof -p 1234", her 2 saniyede bir pid 1234'ün tüm açık dosyalarının bir listesini verecektir. İhtiyaçlarınızı karşılamak için bazı parametreleri değiştirebilirsiniz.


HER 2 saniye bir liste vermeyecektir. Bunun için -r 2 parametresi eksik! -p PID'dir. Cevap çok kötü!
mahatmanich

2
Güzel, -rseçeneğinin farkında değildi lsof. Bu nedenle kullanılan watchyürütmek için lsofher iki saniyede.
Christian

0

Komutun çıktısını bir dosyaya yazdığım bir bash dosyası oluşturdum. Dosya geçerli tarihe göre oluşturuldu. Burada açık dosya sayısını sayıyorum.

#!/bin/bash
while :
do
 cd /proc/<PID>/fd
 today=$(date +"%m-%d-%Y")
 filename="/tmp/${today}.txt"
 ls -l | wc -l >> "${filename}"
 sleep 10
done
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.