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?

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.


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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.