Secara terus-menerus memonitor file yang dibuka / diakses oleh suatu proses

Jawaban:

31

Coba dengan strace -p 12345; itu harus melakukan apa yang ingin Anda capai.

Outputnya dapat difilter untuk hanya menampilkan file yang dibuka ( komentar Dan D. ):

strace -e open -p 12345

Catatan: Anda juga dapat melacak proses yang berjalan dengan cepat strace -e open <command>.

Jens Erat
sumber
output tidak ramah dan terlalu banyak hal tambahan.
MA1
Anda dapat memperbaikinya dengan memipihkan - strace -p {pid} | grep -i "Open" | tee files_opened.log. Kuncinya adalah grep, yang memungkinkan Anda memfilter output untuk panggilan sistem yang Anda inginkan (misalnya open()).
11
@Ninefingers Sebenarnya stracebisa melakukan itu lebih baik daripada grepdengan -eopsi:strace -e open
Dan D.
@DanD oh yeah, ofc :)
Ketika saya membunuh perintah strace, itu juga membunuh hal yang dilacaknya. Mengapa ini terjadi (cygwin)?
CMCDragonkai
6

Fatrace utilitas baru akan melakukan ini: https://launchpad.net/fatrace/

sudo fatrace | grep '(6514)'

Jangan gunakan opsi -p, itu berarti kebalikan dari apa artinya di lsof atau utilitas lain.

Bryce
sumber
3

Ini akan mengulang menjalankan perintah Anda dan membersihkan layar setiap kali:

watch "lsof -p 12345"

PERINGATAN: ini akan kehilangan akses file cepat dan hanya cocok untuk melihat file lama

jcalfee314
sumber
2
Ini agak canggung dibandingkan dengan menggunakan jawaban lain strace.
David Foerster
1
Itu solusi yang tidak akurat - suatu proses dapat menggunakan file di antara eksekusilsof
Dor
@Atau Anda dapat mengatur waktu lsof ke sub 1 detik dan meningkatkan presisi. Meskipun canggung dibandingkan dengan yang lain, Anda salah karena ini adalah solusi yang tidak akurat.
Jordon Bedwell
Jika Anda melihat operasi file yang panjang (seperti cadangan database) ini mungkin merupakan alternatif sederhana yang bagus.
jcalfee314