2010-04-21 23 views
12

ho bisogno di uno script per identificare i file aperti un processo particolare su linuxIdentificare i file aperti un processo particolare su linux

Per identificare fd:

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

mi aspetto di vedere un elenco di numeri che è l'elenco del numero dei descrittori di file che usa nel processo. Per favore mostrami come vedere tutti i file usando in quel processo. Grazie.

risposta

1
lsof | grep processName 
2

È necessario lsof. Per ottenere il PID del programma che ha aperto foo.txt:

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

o cosa Macmede ha detto di fare il contrario (elenca file aperti da un processo).

+0

oh Grazie! fammi provare – aladine

+0

Questo elencherà i processi usando un file. Penso che voglia i file usati da un processo ... Quindi digita il nome del processo invece del nome del file ... – Macmade

+0

Esatto, ho aggiornato la risposta. –

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

se non si dispone di lsof, si può fare più o meno lo stesso utilizzando solo /proc

esempio

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

Il comando probabilmente si desidera utilizzare è lsof. Questa è un'idea migliore rispetto a scavare in /proc, poiché il comando è un modo più chiaro e più stabile per ottenere informazioni sul sistema.

lsof -p pid 

Tuttavia, se siete interessati a /proc roba, si può notare che i file /proc/<pid>/fd/x è un link simbolico al file è associato. È possibile leggere il valore del collegamento simbolico con il comando readlink. Ad esempio, questo dimostra la stdin terminale è destinato a:

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

o, per ottenere tutti i file per qualche processo,

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

Mentre lsof è bello si può semplicemente fare:

ls -l /proc/pidoftheproces/fd 
Problemi correlati