¿Qué son las señales pendientes?

9

Cuando miro los límites de un proceso en ejecución, veo

Max pending signals       15725
  • ¿Que es esto?
  • ¿Cómo puedo determinar un valor razonable para un servicio ocupado?

En general, parece que no puedo encontrar una página que explique cada límite. Algunos se explican por sí mismos (archivos abiertos máximos), otros no (tamaño máximo de msgqueue).

Bart van Heukelom
fuente
En un Arch Linux actualizado, kernel 3.14.37-1-lts, zsh, obtengo sigpending 31603. ¿Por qué estos límites son números tan extraños (es decir, no una potencia de 2)?
Bruce Ediger

Respuestas:

6

De acuerdo con la página del manual de sigpending:

sigpending () devuelve el conjunto de señales que están pendientes de entrega al subproceso de llamada (es decir, las señales que se han generado mientras estaban bloqueadas).

Entonces, se entiende las señales (sigterm, sigkill, sigstop, ...) que están esperando hasta que el proceso salga del estado D(suspensión ininterrumpida). Por lo general, un proceso está en ese estado cuando está esperando E / S. Ese sueño no puede ser interrumpido. Incluso sigkill ( kill -9) no puede y el kernel espera hasta que el proceso se activa (la señal está pendiente de entrega por tanto tiempo).

Para los otros valores poco claros, echaría un vistazo en la página del manual de limits.conf.

caos
fuente
Es los man de sigqueuey setrlimitque realmente debería estar mirando.
JdeBP
0

Los límites del proceso son controlados por setrlimit (2)

Para que pueda ver su página de manual:

RLIMIT_SIGPENDING (desde Linux 2.6.8)

Especifica el límite en el número de señales que se pueden poner en cola para la ID de usuario real del proceso de llamada. Tanto las señales estándar como las de tiempo real se cuentan con el propósito de verificar este límite. Sin embargo, el límite se aplica solo para sigqueue (3); siempre es posible usar kill (2) para poner en cola una instancia de cualquiera de las señales que aún no están en cola para el proceso.

En general, puede obtener la información más detallada cuando consulta las páginas de manual de las llamadas al sistema. C es la lengua materna de UNIX / Linux.

b166er
fuente