2011-04-21 34 views

Respuesta

2

No puede agregar o registrar su propio SIGWHATEVER.

Consulte sigset_t, es de tamaño fijo. Ver valid_signal() beartraps.

+1

¿Dónde obtienes esta 'valid_signal()'? No pude encontrar ninguna página de hombre para eso. – kingsmasher1

+1

@ kingsmasher1: 'valid_signal()' es una función en el kernel de Linux que devuelve verdadero si la señal es JeremyP

+1

http://lxr.free-electrons.com/ident?v=2.6.28;i=valid_signal – JeremyP

4

Existen las señales USR1 y USR2 diseñadas para los fines definidos por el usuario.

+0

Pero eso es un predefinido. El número de señal no será único, ¿verdad? – kingsmasher1

2

Puede usar USR1 y USR2 para este tipo de cosas.

Si eso no es suficiente, puede emular el comportamiento de señal haciendo que su aplicación escuche en un socket al cual las aplicaciones externas pueden enviar mensajes.

+0

Pero en ese caso, no podemos registrarlo con un manejador de señal. ¿Podemos? Porque quiero que cuando esta señal sea utilizada por un temporizador, y esta señal no sea única, no choque con ninguna señal existente. Entonces el método de socket no es factible. – kingsmasher1

+0

Si está completamente dentro de su programa, no necesita usar una señal. Puede implementar un sistema de mensajería simple y usar eso. Las señales se utilizan mejor para la comunicación asíncrona entre procesos. –

+0

Noufal, que no puede ser utilizado por un temporizador POSIX, timer_create. – kingsmasher1

4

puede compilar su propio núcleo con señales especiales :)

9

SIGRTMIN través SIGRTMAX (estos no son normalmente constantes, pero las macros que se expanden a funciones evaluadas en tiempo de ejecución) están disponibles para cualquier uso que gusta, al igual que SIGUSR1 y SIGUSR2. Los primeros tienen soporte de colas en tiempo real adicional; este último no. Simplemente elija uno para usar.

+0

Esto no debería haber sido la respuesta aceptada – Mawg

Cuestiones relacionadas