monitorare i file di processo aperti su Linux (in tempo reale)


10

I file aperti dal processo XYZ possono essere trovati con il comando

ls -l /proc/PID/fd

C'è comunque qualcosa che può essere fatto in modo più interattivo come taill'aggiornamento automatico ogni x secondi?

Risposte:


15

Prova il watchcomando:

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

Guarda è bello.

È possibile utilizzare una vecchia scuola mentre loop:

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

watchè nel pacchetto procps su sistemi basati su debian e l' rpm procps su sistemi derivati ​​RedHat.


1
sleep stesso può essere usato come condizione nel ciclo while, quindi il tuo esempio può essere scritto in modo più elegante in questo modo: while sleep 10; do ls -l / proc / $$ / fd; fatto
ipozgaj,

7

Se vuoi vedere ogni file mentre viene aperto, puoi filtrarlo con strace. Per esempio:

strace -p _pid_of_app_ -e trace=open,close

2
Questa è davvero la risposta migliore. Consiglierei le bandiere -ye -fse stai tentando di eseguire il debug di qualcosa in esecuzione in una shell. Basta passare il PID della shell e -fseguirà tutte le forcelle.
Aea,

4

Potresti combinare lsofe watch.

Ad esempio, watch "lsof -p 1234"ti fornirà un elenco di tutti i file aperti di pid 1234 ogni 2 secondi. È possibile modificare alcuni parametri per soddisfare le proprie esigenze.


non fornirà un elenco OGNI 2 secondi. Manca il parametro -r 2 affinché funzioni! -p è il PID. La risposta è molto scarsa!
Mahatmanich,

2
Bello, non ero a conoscenza -rdell'opzione per lsof. Quindi watcheseguivo lsofogni due secondi.
Christian,

0

Ho creato un file bash in cui stavo scrivendo l'output del comando su un file. Il file è stato generato alla data corrente di base. Qui sto contando il numero di file aperti.

#!/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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.