Come elencare il numero di descrittori di file aperti per processo per tutti i processi su Unix?


4

Ho bisogno di elencare ogni processo e quanti descrittori di file sono aperti per quel processo in modo da poter capire quali processi mantengono troppi file aperti. No, non ho bisogno del numero di file aperti per un solo processo, come altre domande. Devo conoscere il numero per ogni processo in esecuzione, preferibilmente ordinato in ordine decrescente.

Isof non sembra che possa farlo. C'è qualche altra utilità o qualcosa che può realizzare questo?

lsof 

Quale variante o varianti Unix? Ha un /procfile system? (Mac OS X no; Linux e Solaris lo fanno.) Devi lavorare su più piattaforme?
Jonathan Leffler,

Compreso o no stdin, stdout, stderr?
fduff,

Risposte:


4

Farei qualcosa del tipo:

sudo lsof -FKc |
  awk '
   function process() {
     if (pid || tid) {
       print n, \
             tid ? tid " (thread of " pid ": " pname")" : pid, \
             name
       n = tid = 0
     }
   }
   {value = substr($0, 2)}
   /^p/ {
     process()
     pid = value
     next
   }
   /^K/ {
     tid = value
     next
   }
   /^c/ {
      name = value
      if (!tid)
        pname = value
      next
   }
   /^f/ {n++}
   END {process()}' | sort -rn

Per il numero di file aperti e sostituirlo /^f/con /^f[0-9]/per il numero di descrittori di file aperti .


2

Funzionerà almeno con Solaris e Linux e probabilmente con la maggior parte degli altri sistemi operativi che supportano un /procfile system:

#!/bin/sh
cd /proc
echo "  count  pid"
ls -d [1-9]*/fd/* 2>/dev/null | sed 's/\/fd.*$//' | uniq -c | sort -rn

Utilizzare -rginvece che -rnsotto Linux o altri sistemi operativi usando GNU sort.


1
In ordine inverso, usasort -nr
fduff

@fduff, in effetti l'OP ha chiesto un ordine decrescente. Grazie.
jlliagre,
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.