Qual è la differenza tra `lsof -p <pid> | wc -l` e `ls / proc / <pid> / fd | wc -l`?


13

Background: sto giocando con il monitoraggio dell'ulimit per l'esecuzione di processi per un determinato utente. (Di tanto in tanto avevo visto processi che stavano iniziando con un limite errato.) Ho chiesto a un paio di guru Linux autodidatti, e uno ha suggerito lsof -p <pid>, mentre l'altro ha suggerito ls /proc/<pid>/fd, ma nessuno dei due era positivo sul quale riflette più accuratamente il conteggio effettivo verso il massimo limite di file aperti per un processo.

Quindi, che cos'è?

lsof -p <pid> | wc -l

O

ls /proc/<pid>/fd | wc -l

Si prega di approfondire la differenza. Grazie!


3
Sembra fare i compiti.
ewwhite,

1
Non i compiti. Aggiunta una spiegazione migliore. Avevo letto le lsofpagine man e, mentre sospettavo che la risposta fosse un file mappato in memoria, volevo la conferma di una persona più esperta.
Jared,

Risposte:


10

lsofti darà anche file .so mappati in memoria - che tecnicamente non è lo stesso di un file handle su cui l'applicazione ha il controllo. /proc/<pid>/fdè il punto di misurazione per i descrittori di file aperti - tuttavia: menzionato nella pagina proc-man - se il thread principale di un programma multithread è terminato, questa directory non sarà disponibile.

lsof -p <pid> | grep -v mem | egrep -v '^COMMAND PID' | wc -lti mostrerà gli stessi articoli di ls /proc/<pid>/fd | wc -l.

Le mappe di memoria sono disponibili in /proc/<pid>/maps.


La lsofsi dà quasi la stessa uscita, ma include anche cwd, rtde txtdescrittori di file.
Ian Bamforth,

Si noti inoltre che il numero di spazi tra COMMANDe PIDpuò variare. Sostituisci gli spazi con [[:space:]]*per renderlo più generale.
Ian Bamforth,

Ho trovato anche lsof -a -p <pid> -d ^mem -d ^cwd -d ^rtd -d ^txt -d ^DEL | wc -l qui , mentre lsofin Android shell ( adb shell) non supporta -ae -d. Quindi finalmente uso la versione di Kvisle.
Weekend
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.