2010-04-21 10 views
12

Necesito un script para identificar los archivos abiertos de un proceso particular en LinuxIdentificar los archivos abiertos de un proceso particular en Linux

Para identificar fd:

>cd /proc/<PID>/fd; ls |wc –l 

espero ver una lista de números que es la lista de números de descriptores de archivos que se utilizan en el proceso. Por favor muéstrame cómo ver todos los archivos que usan en ese proceso. Gracias.

Respuesta

2

Necesita lsof. Para obtener el PID de la aplicación que abrió foo.txt:

lsof | grep foo.txt | awk -F\ '{print $2}' 

o lo Macmede dijo que hacer lo contrario (archivos de listas abiertas por un proceso).

+0

oh Gracias! déjame probar – aladine

+0

Eso mostrará una lista de los procesos usando un archivo. Creo que quiere los archivos utilizados por un proceso ... Así que escriba el nombre del proceso en lugar del nombre del archivo ... – Macmade

+0

Correcto, actualicé la respuesta. –

5
lsof -p <pid number here> | wc -l 

si usted no tiene lsof, que puede hacer más o menos lo mismo usando sólo /proc

por ejemplo

$ pid=1825 
$ ls -1 /proc/$pid/fd/* 
$ awk '!/\[/&&$6{_[$6]++}END{for(i in _)print i}' /proc/$pid/maps 
17

El comando es probable que desee utilizar es lsof. Esta es una mejor idea que buscar en /proc, ya que el comando es una manera más clara y más estable de obtener información del sistema.

lsof -p pid 

Sin embargo, si usted está interesado en /proc cosas, es posible que observe que los archivos /proc/<pid>/fd/x es un enlace simbólico al archivo que está asociado. Puede leer el valor del enlace simbólico con el comando readlink. Por ejemplo, esto muestra la entrada estándar terminal está obligado a:

$ readlink /proc/self/fd/0 
/dev/pts/43 

o, para obtener todos los archivos de algún proceso,

ls /proc/<pid>/fd/* | xargs -L 1 readlink 
8

Mientras lsof es agradable que sólo puede hacer:

ls -l /proc/pidoftheproces/fd 
Cuestiones relacionadas