Antecedentes: estoy jugando monitoreando el ulimit para ejecutar procesos para un usuario en particular. (Ocasionalmente había visto procesos que comenzaban con un límite incorrecto). Pregunté a un par de gurús de Linux autoproclamados, y uno sugirió lsof -p <pid>
, mientras que el otro sugirió ls /proc/<pid>/fd
, pero ninguno fue positivo sobre cuál refleja con mayor precisión el conteo real hacia el máximo Límite de archivos abiertos para un proceso.
Entonces, cual es?
lsof -p <pid> | wc -l
O
ls /proc/<pid>/fd | wc -l
Por favor, explique la diferencia. ¡Gracias!
lsof
páginas del manual, y aunque sospechaba que la respuesta eran archivos mapeados en memoria, quería la confirmación de una persona más experimentada.Respuestas:
lsof
también le proporcionará archivos .so asignados en memoria, que técnicamente no es lo mismo que un identificador de archivo sobre el que la aplicación tiene control./proc/<pid>/fd
es el punto de medición para los descriptores de archivos abiertos, sin embargo: Mencionado en la página proc-man, si el hilo principal de un programa multiproceso ha finalizado, este directorio no estará disponible.lsof -p <pid> | grep -v mem | egrep -v '^COMMAND PID' | wc -l
le mostrará los mismos artículos quels /proc/<pid>/fd | wc -l
.Los mapas de memoria están disponibles en
/proc/<pid>/maps
.fuente
lsof
le da casi la misma potencia, pero también incluyecwd
,rtd
ytxt
descriptores de fichero.COMMAND
yPID
puede variar. Reemplace los espacios con[[:space:]]*
para hacerlo más general.lsof -a -p <pid> -d ^mem -d ^cwd -d ^rtd -d ^txt -d ^DEL | wc -l
aquí , mientras quelsof
en Android shell (adb shell
) no es compatible-a
y-d
. Así que finalmente uso la versión de Kvisle.