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!
lsof
pages 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.Réponses:
lsof
vous 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>/fd
est 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 -l
vous montrera les mêmes éléments quels /proc/<pid>/fd | wc -l
.Les cartes mémoire sont disponibles en
/proc/<pid>/maps
.la source
lsof
vous donne presque la même sortie, mais il comprend aussicwd
,rtd
et lestxt
descripteurs de fichiers.COMMAND
etPID
peut varier. Remplacez les espaces par[[:space:]]*
pour le rendre plus général.lsof -a -p <pid> -d ^mem -d ^cwd -d ^rtd -d ^txt -d ^DEL | wc -l
ici , tandis que lelsof
shell Android (adb shell
) ne prend pas en charge-a
et-d
. J'utilise donc enfin la version de Kvisle.