offene Prozessdateien unter Linux überwachen (Echtzeit)

10

Die vom XYZ-Prozess geöffneten Dateien können mit dem Befehl gefunden werden

ls -l /proc/PID/fd

Gibt es überhaupt eine Möglichkeit, die interaktiver durchgeführt werden kann, z. B. tailalle x Sekunden automatisch aktualisiert?

Frankie
quelle

Antworten:

15

Versuchen Sie den watchBefehl:

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

Uhr ist schön.

Sie könnten eine alte Schule while-Schleife verwenden:

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

watchist im procps- Paket auf Debian-basierten Systemen und im procps-RPM auf von RedHat abgeleiteten Systemen enthalten.

Davey
quelle
1
Der Schlaf selbst kann als Bedingung in der while-Schleife verwendet werden, sodass Ihr Beispiel eleganter wie folgt geschrieben werden kann: while sleep 10; do ls -l / proc / $$ / fd; fertig
ipozgaj
6

Wenn Sie jede Datei beim Öffnen sehen möchten, können Sie dies mit filtern strace. Zum Beispiel:

strace -p _pid_of_app_ -e trace=open,close
Evgeny
quelle
2
Das ist wirklich die beste Antwort. Ich würde die Flags empfehlen -yund -fwenn Sie versuchen, etwas zu debuggen, das in einer Shell ausgeführt wird. Geben Sie einfach die Shell-PID ein und -ffolgen Sie den Gabeln.
Aea
3

Sie könnten kombinieren lsofund watch.

Zum Beispiel erhalten watch "lsof -p 1234"Sie alle 2 Sekunden eine Liste aller geöffneten Dateien von pid 1234. Sie können einige Parameter ändern, um sie Ihren Anforderungen anzupassen.

Christian
quelle
Es wird nicht alle 2 Sekunden eine Liste angezeigt. Der Parameter -r 2 fehlt, damit das funktioniert! -p ist die PID. Die Antwort ist sehr schlecht!
Mahatmanich
2
Schön, war mir der -rOption für nicht bewusst lsof. Deshalb habe ich watchauszuführen lsofalle zwei Sekunden.
Christian
0

Ich habe eine Bash-Datei erstellt, in der ich die Ausgabe des Befehls in eine Datei geschrieben habe. Die Datei wurde zum aktuellen Datum erstellt. Hier zähle ich die Anzahl der geöffneten Dateien.

#!/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
quelle