sigset, sighold, sigrelse o sigignore Subroutine

Finalidad

Mejorar la instalación de señal y proporcionar gestión de señal.

Biblioteca

Biblioteca C estándar (libc.a)

Sintaxis

#include <signal.h>
void (*sigset( Signal,  Function))()
int Signal;
void (*Function)();
int sighold ( Signal)
int Signal;
int sigrelse ( Signal)
int Signal;
int sigignore ( Signal)
int Signal;

Descripción

Las subrutinas sigset, sighold, sigrelsey sigignore mejoran el recurso de señal y proporcionan gestión de señales para los procesos de aplicación.

La subrutina sigset especifica la acción de señal del sistema que se debe realizar al recibir un parámetro Signal .

Las subrutinas sighld y sigrelse establecen regiones críticas de código. Una llamada a la subrutina sighold es análoga a elevar el nivel de prioridad y aplazar o retener una señal hasta que sigrelsereduzca la prioridad. La subrutina sigrelse restaura la acción de señal del sistema en la acción especificada anteriormente por la estructura sigset .

La subrutina sigignore establece la acción para el parámetro Signal en SIG_IGN.

La otra rutina de gestión de señales, señal, no debe utilizarse junto con estas rutinas para un tipo de señal determinado.

Parámetros

Elemento Descripción
Señal Especifica la señal. Al parámetro Signal se le puede asignar cualquiera de las señales siguientes:
SIGHUP
Colgar
SIGINT
Interrumpir
SIGQUIT
Salir *
SIGILL
Instrucción no permitida (no se restablece cuando se captura) *
SIGTRAP
Condición de excepción de rastreo (no se restablece cuando se captura) *
SIGABRT
Terminar anormalmente *
SIGFPE
Excepción de coma flotante *, o excepción aritmética, entero dividido por 0
SIGSYS
Argumento erróneo en rutina *
SIGPIPE
Escribir en un conducto sin nadie que lo lea
SIGALRM
Reloj alarma
SIGTERM
Señal de terminación de software
SIGUSR1
Señal definida por el usuario 1
SIGUSR2
Señal definida por el usuario 2.

* La acción predeterminada para estas señales es una terminación anómala.

Para la portabilidad, los programas de aplicación deben utilizar o capturar sólo las señales listadas anteriormente. Otras señales son dependientes del hardware y dependientes de la implementación y pueden tener significados o resultados muy diferentes a través de los sistemas. Por ejemplo, las señales de System V (SIGEMT, SIGBUS, SIGSEGVy SIGIOT) dependen de la implementación y no se listan anteriormente. Las implementaciones específicas pueden tener otras señales dependientes de la implementación.

Elemento Descripción
Función Especifica la opción. El parámetro Función se declara como un puntero de tipo a una función que devuelve void. Al parámetro Función se le asigna uno de los cuatro valores: SIG_DFL, SIG_IGN, SIG_HOLD, o una dirección de una función de captura de señal. Las definiciones de las acciones realizadas por cada uno de los valores son:
DFL_SIG
Terminar el proceso al recibir una señal.

Al recibir la señal especificada por el parámetro Signal , el proceso de recepción debe terminar con todas las consecuencias descritas en la subrutina _exit . Además, si Señal es una de las señales marcadas con un asterisco más arriba, se pueden invocar rutinas de terminación de proceso anómala dependientes de la implementación, como un volcado del núcleo.

SIG_IGN
Ignorar señal.

Se descarta cualquier señal pendiente especificada por el parámetro Señal . Una señal pendiente es una señal que se ha producido pero para la que no se ha realizado ninguna acción. La acción de señal del sistema se establece para ignorar futuras apariciones de este tipo de señal.

SIG_HOLD
Señal de retención.

La señal especificada por el parámetro Signal se debe mantener. Cualquier señal pendiente de este tipo permanece retenida. Sólo se mantiene una señal de cada tipo.

address Señal de captura.

Tras la recepción de la señal especificada por el parámetro Señal , el proceso de recepción debe ejecutar la función de captura de señal a la que apunta el parámetro Función . Se libera cualquier señal pendiente de este tipo. Esta dirección se conserva entre las llamadas a las otras funciones de gestión de señales, sighold y sigrelse. El número de señal Signal se pasa como único argumento a la función de captura de señal. Antes de especificar la función de captura de señal, el valor del parámetro Función para la señal capturada se establece en SIG_HOLD. Durante el retorno normal del manejador de captura de señal, la acción de señal del sistema se restaura en el parámetro Función y se libera cualquier señal retenida de este tipo. Si se realiza un goto no local (consulte la subrutina setjmp ), se debe invocar la subrutina sigrelse para restaurar la acción de señal del sistema y liberar cualquier señal retenida de este tipo.

Al regresar de la función de captura de señal, el proceso de recepción reanudará la ejecución en el punto en el que se interrumpió, excepto para las señales definidas por la implementación en las que esto puede no ser cierto.

Cuando se produce una señal que se va a capturar durante una operación no atómica como, por ejemplo, una llamada a la subrutina read, write, openo ioctl en un dispositivo lento (como un terminal); durante una subrutina pause ; durante una subrutina wait que no se devuelve inmediatamente, se ejecuta la función de captura de señal. La rutina interrumpida devuelve un valor de -1 al proceso de llamada con la variable global errno establecida a EINTR.

Valores de retorno

Al completarse correctamente, la subrutina sigset devuelve el valor anterior de la acción de señal del sistema para la Señal especificada. De lo contrario, devuelve SIG_ERR y la variable global errno se establece para indicar el error.

Para las subrutinas sighold, sigrelsey sigignore , se devuelve un valor de 0 tras el éxito. En caso contrario, se devuelve un valor de -1 y se establece la variable global errno para indicar el error.

Códigos de error

La subrutina sigset, sighold, sigrelseo sigignore no es satisfactoria si se cumple lo siguiente:

Elemento Descripción
EINVAL El valor de Señal es un número de señal no permitido o el manejo predeterminado de Señal no se puede cambiar.