memonitor file proses terbuka di linux (real-time)

10

File yang dibuka oleh proses XYZ dapat ditemukan dengan perintah

ls -l /proc/PID/fd

Adakah yang bisa dilakukan dengan cara yang lebih interaktif seperti tailmenyegarkan otomatis setiap x detik?

Frankie
sumber

Jawaban:

15

Coba watchperintah:

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

Menonton itu bagus.

Anda bisa menggunakan old school while loop:

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

watchada dalam paket procps pada sistem berbasis debian dan rpm procps pada sistem turunan RedHat.

davey
sumber
1
sleep itu sendiri dapat digunakan sebagai kondisi di while, jadi contoh Anda dapat ditulis lebih elegan seperti ini: while sleep 10; lakukan ls-l / proc / $$ / fd; dilakukan
ipozgaj
7

Jika Anda ingin melihat setiap file saat dibuka, Anda dapat memfilternya dengan strace. Sebagai contoh:

strace -p _pid_of_app_ -e trace=open,close
Evgeny
sumber
2
Ini benar - benar jawaban terbaik. Saya akan merekomendasikan bendera -ydan -fjika Anda mencoba men-debug sesuatu yang berjalan di shell. Cukup berikan PID shell dan -fikuti setiap garpu.
Aea
4

Anda bisa menggabungkan lsofdan watch.

Misalnya watch "lsof -p 1234"akan memberi Anda daftar semua file yang terbuka dari pid 1234 setiap 2 detik. Anda dapat mengubah beberapa parameter untuk memenuhi kebutuhan Anda.

Kristen
sumber
itu tidak akan memberikan daftar SETIAP 2 detik. Parameter -r 2 tidak ada untuk berfungsi! -p adalah PID. Jawabannya sangat buruk!
mahatmanich
2
Bagus, tidak menyadari -ropsi untuk lsof. Karena itu saya biasa watchmengeksekusi lsofsetiap dua detik.
Christian
0

Saya membuat file bash di mana saya menulis output dari perintah ke file. File dihasilkan berdasarkan tanggal saat ini. Di sini saya menghitung jumlah file terbuka.

#!/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
Akanksha Sharma
sumber