Supervisar archivos de proceso abiertos en Linux (en tiempo real)

10

Los archivos abiertos por el proceso XYZ se pueden encontrar con el comando

ls -l /proc/PID/fd

¿Hay alguna forma de hacerlo de una manera más interactiva, como tailla actualización automática cada x segundos?

Frankie
fuente

Respuestas:

15

Prueba el watchcomando:

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

El reloj es lindo.

Podrías usar una vieja escuela while loop:

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

watchestá en el paquete procps en sistemas basados ​​en Debian y el rpm procps en sistemas derivados de RedHat.

davey
fuente
1
el sueño en sí se puede usar como condición en el ciclo while, por lo que su ejemplo se puede escribir de manera más elegante de esta manera: mientras que el sueño 10; do ls -l / proc / $$ / fd; hecho
ipozgaj
7

Si desea ver cada archivo a medida que se abre, puede filtrarlo con strace. Por ejemplo:

strace -p _pid_of_app_ -e trace=open,close
Evgeny
fuente
2
Esta es realmente la mejor respuesta. Recomiendo las banderas -yy -fsi está intentando depurar algo que se ejecuta en un shell. Simplemente pase el PID de shell y -fseguirá cualquier bifurcación.
Aea
4

Podrías combinar lsofy watch.

Por ejemplo, watch "lsof -p 1234"le dará una lista de todos los archivos abiertos de pid 1234 cada 2 segundos. Puede cambiar algunos parámetros para satisfacer sus necesidades.

cristiano
fuente
no dará una lista CADA 2 segundos. ¡Falta el parámetro -r 2 para que eso funcione! -p es el PID. ¡La respuesta es muy pobre!
mahatmanich
2
Agradable, no estaba al tanto de la -ropción para lsof. Por lo tanto, solía watchejecutar lsofcada dos segundos.
Christian
0

Creé un archivo bash donde estaba escribiendo la salida del comando en un archivo. El archivo se generó en base a la fecha actual. Aquí estoy contando el número de archivos abiertos.

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