Las señales son las interrupciones que obligan a un sistema operativo a detener su tarea en curso y atender la tarea para la que se envió la interrupción. Estas interrupciones pueden pausar el servicio en cualquier programa de un sistema operativo. De manera similar, C++ también ofrece varias señales que puede capturar y procesar en un programa. Aquí hay una lista de varias señales y sus operaciones que C++ proporciona al usuario para trabajar.
Señales |
Operaciones |
---|---|
SEGUIR |
produce un recibo para una señal activa |
SIGTERM |
Envía una solicitud de terminación al programa |
SIGBUS |
Error de bus que indica acceso a una dirección no válida |
SEÑAL |
Detecta un comando ilegal |
SIGALRM |
Esto es utilizado por la función alarm() e indica la expiración del temporizador. |
SIGABRT |
Terminación de un programa, anormalmente |
SEGUIMIENTO |
La señal no puede ser bloqueada, manipulada e ignorada y puede detener un proceso |
SIGSEGV |
Acceso no válido al almacenamiento |
SIGFPE |
Operaciones de desbordamiento u operaciones matemáticamente incorrectas como dividir por cero |
SIGUSR1 SIGSUR2 |
Señales definidas por el usuario |
Esta función signal() es proporcionada por la biblioteca de señales y se usa para atrapar interrupciones o eventos inesperados.
Sintaxis:
signal(registered signal, signal handler)
El primer argumento es un número entero, que representa el número de señal y el segundo es el puntero a una función de manejo de señal. Debemos tener en cuenta que la señal que queremos captar debe estar registrada mediante una función de señal y debe estar asociada a una función de manejo de señal. La función de manejo de señales debe ser del tipo vacío.
Ejemplo:
CPP
// CPP Program to demonstrate the signal() function #include <csignal> #include <iostream> using namespace std; void signal_handler(int signal_num) { cout << "The interrupt signal is (" << signal_num << "). \n"; // It terminates the program exit(signal_num); } int main() { // register signal SIGABRT and signal handler signal(SIGABRT, signal_handler); while (true) cout << "Hello GeeksforGeeks..." << endl; return 0; }
Salida: al estar en un ciclo infinito, este código mostrará la siguiente salida hasta que se enfrente una interrupción:
Hello GeeksforGeeks... Hello GeeksforGeeks... Hello GeeksforGeeks... Hello GeeksforGeeks...
Ahora si presionamos Ctrl+C para enviar una interrupción, el programa saldrá imprimiendo:
Hello GeeksforGeeks... Hello GeeksforGeeks... Hello GeeksforGeeks... Hello GeeksforGeeks... The interrupt signal is (22).
función aumentar()
La función raise() se utiliza para generar señales.
Sintaxis:
raise( signal )
Toma un argumento como cualquiera de las funciones mencionadas en la lista.
Ejemplo:
CPP
// CPP Program to demonstrate the raise() function #include <csignal> #include <iostream> using namespace std; void signal_handler(int signal_num) { cout << "Interrupt signal is (" << signal_num << ").\n"; // It terminates program exit(signal_num); } int main() { int count = 0; signal(SIGSEGV, signal_handler); // register signal SIGSEGV and signal handler while (++count) { cout << "Hello GeeksforGeeks..." << endl; if (count == 5) raise(SIGSEGV); } return 0; }
Hello GeeksforGeeks... Hello GeeksforGeeks... Hello GeeksforGeeks... Hello GeeksforGeeks... Hello GeeksforGeeks... Interrupt signal is (11).
Este artículo es una contribución de Chinmoy Lenka . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA