monitoruj otwarte pliki procesu w systemie Linux (w czasie rzeczywistym)

10

Pliki otwarte przez proces XYZ można znaleźć za pomocą polecenia

ls -l /proc/PID/fd

Czy jest coś, co można zrobić w bardziej interaktywny sposób, np. tailAutomatyczne odświeżanie co x sekund?

Frankie
źródło

Odpowiedzi:

15

Spróbuj wykonać watchpolecenie:

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

Zegarek jest fajny.

Możesz użyć starej pętli while szkoły:

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

watchznajduje się w pakiecie procps na systemach opartych na Debianie i procps rpm na systemach pochodnych RedHat.

davey
źródło
1
sam sen może być użyty jako warunek w pętli while, więc twój przykład może być napisany bardziej elegancko w ten sposób: podczas snu 10; do ls -l / proc / $$ / fd; gotowe
ipozgaj
8

Jeśli chcesz zobaczyć każdy otwierany plik, możesz go przefiltrować za pomocą strace. Na przykład:

strace -p _pid_of_app_ -e trace=open,close
Evgeny
źródło
2
To naprawdę najlepsza odpowiedź. Polecam flagi, -ya -fjeśli próbujesz debugować coś działającego w powłoce. Wystarczy podać PID powłoki i -fpodąży za wszelkimi widłami.
Aea
4

Możesz połączyć lsofi watch.

Na przykład watch "lsof -p 1234"da ci listę wszystkich otwartych plików pid 1234 co 2 sekundy. Możesz zmienić niektóre parametry, aby spełnić swoje potrzeby.

chrześcijanin
źródło
nie da listy KAŻDE 2 sekundy. Aby to zadziałało, brakuje parametru -r 2! -p jest PID. Odpowiedź jest bardzo słaba!
mahatmanich
2
Fajnie, nie wiedziałem o -ropcji lsof. Dlatego zwykłem watchwykonywać lsofco dwie sekundy.
Christian
0

Utworzyłem plik bash, w którym zapisywałem dane wyjściowe polecenia do pliku. Plik został wygenerowany na podstawie bieżącej daty. Tutaj liczę liczbę otwartych plików.

#!/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
źródło