Quelle est la différence entre `lsof -p <pid> | wc -l` et `ls / proc / <pid> / fd | wc -l`?

13

Contexte: je joue avec la surveillance de l'ulimit pour l'exécution des processus pour un utilisateur particulier. (J'avais parfois vu des processus qui commençaient avec une limite incorrecte.) J'ai demandé à quelques gourous Linux autoproclamés, et l'un a suggéré lsof -p <pid>, tandis que l'autre a suggéré ls /proc/<pid>/fd, mais aucun n'était positif quant à ce qui reflète plus précisément le nombre réel vers le maximum limite de fichiers ouverts pour un processus.

Alors, c'est quoi?

lsof -p <pid> | wc -l

Ou

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

Veuillez expliquer la différence. Merci!

Jared
la source
3
Cela ressemble à des devoirs.
ewwhite
1
Pas de devoirs. Ajout d'une meilleure explication. J'avais lu les lsofpages de manuel, et bien que je soupçonne que la réponse était des fichiers mappés en mémoire, je voulais la confirmation d'une personne plus expérimentée.
Jared

Réponses:

10

lsofvous donnera également des fichiers .so mappés en mémoire - qui ne sont pas techniquement les mêmes que les descripteurs de fichiers sur lesquels l'application a le contrôle. /proc/<pid>/fdest le point de mesure pour les descripteurs de fichiers ouverts - cependant: mentionné dans la page proc-man - si le thread principal d'un programme multithread s'est terminé, ce répertoire ne sera pas disponible.

lsof -p <pid> | grep -v mem | egrep -v '^COMMAND PID' | wc -lvous montrera les mêmes éléments que ls /proc/<pid>/fd | wc -l.

Les cartes mémoire sont disponibles en /proc/<pid>/maps.

Kvisle
la source
Le lsofvous donne presque la même sortie, mais il comprend aussi cwd, rtdet les txtdescripteurs de fichiers.
Ian Bamforth
Notez également que le nombre d'espaces entre COMMANDet PIDpeut varier. Remplacez les espaces par [[:space:]]*pour le rendre plus général.
Ian Bamforth
J'ai également trouvé lsof -a -p <pid> -d ^mem -d ^cwd -d ^rtd -d ^txt -d ^DEL | wc -l ici , tandis que le lsofshell Android ( adb shell) ne prend pas en charge -aet -d. J'utilise donc enfin la version de Kvisle.
Week