SIGNAL(2)

NOMBRE
signal - manejo de señales según C ANSI

SINOPSIS
#include <signal.h>

void (*signal(int signum, void (*manejador)(int)))(int);

DESCRIPCIÓN
La llamada al sistema signal instala un nuevo manejador de señal para la señal cuyo número es signum. El manejador de señal se establece como manejador, que puede ser una función especificada por el usuario, o una de las siguientes macros:

    SIG_IGN
        No tener en cuenta la señal.

    SIG_DFL
        Dejar la señal con su comportamiento predefinido.

El argumento entero que se pasa a la rutina de manejo de señal es el número de la señal. Esto hace posible emplear un mismo manejador de señal para varias de ellas.

VALOR DEVUELTO
signal devuelve el valor anterior del manejador de señal, o SIG_ERR si ocurre un error.

OBSERVACIONES
No se pueden instalar manejadores para las señales SIGKILL ni SIGSTOP.

Contrariamente a los sistemas BSD, las señales en Linux se reestablecen a su comportamiento predeterminado cuando se lanzan. Sin embargo, si usted incluye <bsd/signal.h> en vez de <signal.h> entonces signal se redefine como __bsd_signal y signal tiene la semántica de BSD. Ambas versiones de signal son rutinas de biblioteca construidas sobre sigaction(2).

Si usted no entiende bien el prototipo del principio de esta página, puede ayudar el verlo separado así:

typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t manejador);

De acuerdo con POSIX, el comportamiento de un proceso es indefinido después de no hacer caso a una señal SIGFPE, SIGILL o SIGSEGV que no ha sido generada por las funciones kill() ni raise(). La división entera por cero tiene un resultado indefinido. En algunas arquitecturas generará una señal SIGFPE. No hacer caso a esta señal puede conducir a un bucle infinito.

CONFORME CON
C ANSI

CONSULTE TAMBIÉN
kill(1), kill(2), killpg(2), pause(2), raise(3), sigaction(2), signal(7), sigsetops(3), sigvec(2), alarm(2).