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?

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.


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

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.