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!

lsofpá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:
lsoftambié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>/fdes 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 -lle mostrará los mismos artículos quels /proc/<pid>/fd | wc -l.Los mapas de memoria están disponibles en
/proc/<pid>/maps.fuente
lsofle da casi la misma potencia, pero también incluyecwd,rtdytxtdescriptores de fichero.COMMANDyPIDpuede 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 -laquí , mientras quelsofen Android shell (adb shell) no es compatible-ay-d. Así que finalmente uso la versión de Kvisle.