3 votos

¿Cómo comprobar los archivos abiertos máximos permitidos (ulimit) de un proceso en ejecución (o aplicación en ejecución)?

En Linux, puedo comprobar el máximo de archivos abiertos permitidos (ulimit) de un proceso simplemente ejecutando

$ cat /proc/<PID>/limits

Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             14248                14248                processes 
Max open files            1024                 1048576              files     
Max locked memory         67108864             67108864             bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       14248                14248                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us

¿Cómo puedo hacer esto en MacOS?

Muchas gracias.

PS1: Sabía correr ulimit para comprobar la configuración actual de ulimit. Pero no sé cómo comprobar y verificar esos valores para un proceso en ejecución.

PS2: Sabía cómo usar lsof para comprobar cuántos archivos está abriendo un proceso. Pero no indica el número máximo de archivos que puede abrir un proceso.

2voto

Jose Chavez Puntos 645

No se puede hacer esto de manera similar a Linux.

procfs aunque es común en muchos sistemas operativos tipo Unix, no está disponible en todos los sistemas operativos tipo Unix. No está disponible en MacOS.

El estándar POSIX prescribe un getrlimit() para recuperar estos límites para el proceso actual. Está disponible en MacOS ya que es compatible con POSIX.

Por otro lado, Linux ha implementado una llamada al sistema conocida como prlimit() que permite obtener estos límites para otros procesos distintos al actual. La llamada al sistema es específica de Linux y no está disponible en otros sistemas operativos tipo Unix.

Todo esto significa que no hay una API directa para recuperar esa información en MacOS.

Sin embargo, puede recuperar la información por medio de la inspección dentro del otro proceso. Por ejemplo, adjuntando de forma similar a como lo haría un depurador ( ptrace() ), o mediante el uso de dtrace . Sin embargo, es posible que el otro proceso se resista activamente a esta medida.

Dependiendo de tu caso de uso específico, que no has revelado, YMMV.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X