Lo que ocurre es lo siguiente:
- primera señal recibida, es decir SIGUSR1, gestor se llama y se está ejecutando
- segunda señal recibida, dado que el manejador de nr1 aún se está ejecutando, la señal nr2 queda pendiente y bloqueada.
- Tercera señal recibida, dado que el controlador de nr1 todavía está en ejecución, la señal 3 se descarta.
- Cuarta, quinta ... señal del mismo tipo que la señal nr1 son descartadas.
Una vez que el manejador de señal haya terminado con la señal nr1, procesará la señal nr2, y luego el manejador de señal procesará el SIGUSR2.
Básicamente, las señales pendientes del mismo tipo no están en cola, sino que se descartan. Y no, no hay una manera fácil de "explotar" enviar señales de esa manera. Uno siempre asume que puede haber varias señales que se descartan e intenta que el controlador haga el trabajo de limpiar y descubrir qué hacer (como cosechar hijos, si todos los niños mueren al mismo tiempo).
Muchas gracias, ese era el problema. Entonces, mi solución es que, después de cada SIGUSR1 recibido en el proceso secundario, responda con SIGUSR2 y el proceso principal no envíe otro SIGUSR1 antes de que reciba la confirmación SIGUSR2 del niño. ¡Y parece funcionar! Gracias una vez más:) –