Descripción del programa: en un entorno Unix, podemos dejar que el programa enmascare algunas señales (excepto la señal SIGKILL y SIGSTOP). Este ejemplo demuestra esta función.
//Programa "APUE" 10-11: Ejemplos de procesamiento de señales y sigprocmask # include < unistd.h > # include < stdio.h > # include < stdlib.h > # include < señal .h > //salida un mensaje de error y salidas error_quit void (const char * str) {fprintf (stderr, "% s \\ n ", str); de salida (1);} //señal de vacío sig_quit SIGQUIT controlador ( int signo) {printf (" atrapado SIGQUIT \\ n "), si (SIG_ERR == señal (SIGQUIT, SIG_DFL)) error_quit (" no se puede restablecer SIGQUIT ");} int main (void) {sigset_t newmask, oldmask , pendmask; //manejador conjunto si la señal SIGQUIT (SIG_ERR == señal (SIGQUIT, sig_quit)) error_quit (" no puede coger SIGQUIT "); //el conjunto de señales newmask se inicializa a sigemptyset vacío (&newmask ); //En el conjunto de señales de nueva máscara, agregue la señal SIGQUIT sigaddset (&newmask, SIGQUIT); int temp; //Establezca la máscara antigua al conjunto de señales enmascarado actual (para su posterior recuperación) //Agregue la nueva máscara a la señal de la máscara actual Establecer temp = sigprocmask (SIG_BLOCK, &newmask, &oldmask); if (temp < 0) error_quit (" error SIG_BLOCK "); sueño (5); //devuelve el conjunto señal de máscara actual temp = sigpending (&pendmask), si (temp < 0) error_quit (" error " sigpending;); //comprobar señal SIGQUIT está en pendmask señal centralizada si (sigismember (&pendmask, SIGQUIT)) printf (" \\ \\ nSIGQUIT pendiente n "); //restaurar el conjunto temp señal máscara = sigprocmask (SIG_SETMASK, &oldmask, NULL); si (temp < 0) error_quit (" error SIG_SETMASK "); printf (" SIGQUIT desbloqueado \\ n "); sueño (5); return 0;} ejecutar ejemplo:
www. linuxidc.com @ubuntu: ~ /código $ gcc -o temp.c temp www.linuxidc.com @ubuntu: ~ /$ código se genera ./temp ^ \\ # señal una vez SIGQUIT SIGQUIT pendientes # atrapado SIGQUIT # devuelve del sueño SIGQUIT desbloqueado en el programa de procesamiento de señales # sigpromask devuelve ^ \\ quit # nuevamente genera la señal www.linuxidc.com @ubuntu: ~ /code $ ./temp # Vuelva a ejecutar el programa ^ \\ ^ \\ ^ \\ ^ \\ ^ \\ ^ \\ ^ \\ ^ \\ ^ \\ ^ \\ ^ \\ ^ \\ \\ Generar varias veces SIGQUIT señal SIGQUIT pendiente capturada SIGQUIT # solo recibe una señal SIGQUIT desbloqueada ^ \\ Salir
Conclusión:
1: El proceso bloquea la señal SIGQUIT, durante la cual la señal SIGQUIT generada se bloquea hasta que la señal deja de estar bloqueada.
2: Durante el reposo, si se genera una señal, la señal en este momento está pendiente, pero ya no está bloqueada (por lo que se puede llamar a la función sig_quit antes de salir)
3: El sistema no pone en cola la señal mientras la señal está bloqueada.
Notas (este pasaje está extraído de Internet):
Señal '; Pendiente " es un estado que se refiere a la generación de señales antes de que se procese la señal. Este período de tiempo; la señal "" bloqueo" es una acción de conmutación, lo que significa que la señal de bloqueo se procesa, pero no para evitar que se genere la señal.
El ejemplo de APUE utiliza sigprocmask para bloquear la señal de salida antes de dormir, luego dormir, y luego genera una señal de salida durante el proceso de suspensión, pero la señal de salida está bloqueada en este momento (chino " bloqueando " Es fácil ser mal entendido como un estado aquí, de hecho es un tipo de acción similar a un interruptor, por lo que se dice que "bloqueado" está bloqueado, en lugar de "bloqueado", por lo que está en el estado de "pendiente" Después de la suspensión, use sigprocmask para desactivar el interruptor de bloqueo de la señal de salida, ya que la señal de salida generada antes está siempre en estado pendiente. Cuando el interruptor de bloqueo está cerrado, sale inmediatamente del estado "Pendiente" y se procesa. Esto sucede en sigprocmask. Antes de
VMware tutorial de instalación menor sistemas Linux porque el proyecto tiene qu
Azure es uno de los representantes de más y más compañías que están considerando cambiar su negocio
En los problemas de seguridad de la red cada vez más importantes de la actualidad, ¿cómo garantizar
pasos de configuración de servicios de Telnet son las siguientes: a, paquete de instalación de
Linux principiantes --------- cinco errores más comunes
El auge de Win7 continuará hasta 2013
Cómo limitar el permiso de ejecución de la partición /tmp
Consideraciones de configuración de red de Linux (con CentOS como ejemplo)
Linux evita el método de bloqueo IO
Cómo instalar el paquete rpm para el sistema Linux
Aula para principiantes: le enseña cómo mejorar la seguridad del sistema Linux
Cómo usar la aplicación de oficina móvil win10 tutorial de la aplicación de oficina móvil win10
Limite el acceso al "disco local" para hacer que su computadora sea más segura
La página del sitio IIS7 en win7 no se puede mostrar normalmente. Cómo hacerlo
Cómo usar UAC para mejorar la seguridad de Windows 7 [mapa]
Win10 Mobile preview versión 10586.29 versión lenta push screenshot