Las señales en las computadoras son una forma de comunicación entre el proceso y el sistema operativo. Cuando un programa en ejecución sufre algún error grave, el sistema operativo envía una señal al proceso y es posible que el proceso no se ejecute más. Algunos procesos pueden tener un controlador de señales que realiza algunas tareas importantes antes de que el proceso abandone la CPU.
La señal y la interrupción son básicamente lo mismo, pero existe una pequeña distinción, es decir, las interrupciones son generadas por el procesador y manejadas por el kernel, pero las señales son generadas por el kernel y manejadas por el proceso. Las señales de error generalmente provocan la finalización del programa y se crea un archivo de volcado de núcleo denominado core, que almacena el estado del proceso en el momento de la finalización. Este archivo se puede investigar con el depurador para conocer la causa de la terminación del programa.
Señales de error:
- SIGFPE:
esta señal de error denota algún error aritmético que ocurrió como una división por cero o un error de punto flotante. Si un programa almacena datos enteros en una ubicación que luego se usa como una operación de punto flotante, esto provoca una excepción de «operación no válida» ya que el procesador no puede reconocer los datos como un valor de punto flotante. Pero esta señal no especifica el tipo de error de coma flotante.
- SIGILL:
esta señal indica instrucción ilegal. Cuando se ejecuta una instrucción basura o una instrucción que un programa no tiene privilegios para ejecutar, se genera esta señal. C no produce instrucciones ilegales, por lo que no hay posibilidad de enfrentar una señal de error de este tipo, ya que la causa probable puede ser que el archivo del objeto esté dañado. Esta señal también se genera cuando se produce un desbordamiento de pila.
- SIGSEGV:
la señal se genera cuando un proceso intenta acceder a una ubicación de memoria que no se le ha asignado, como eliminar la referencia de un puntero salvaje que conduce a una «falla de segmentación». La señal solo se genera cuando un programa se aleja de su espacio de memoria para que pueda ser detectado por el mecanismo de protección de la memoria.
El nombre es una abreviatura de «violación de segmentación». - SIGBUS:
el nombre es una abreviatura de «Error de bus». Esta señal también se produce cuando se accede a una memoria no válida. Puede parecer lo mismo que SIGSEGV, pero en SIGSEGV, la ubicación de memoria a la que se hace referencia es válida, pero en el caso de SIGBUS, la memoria a la que se hace referencia no existe, es decir, se elimina la referencia de una ubicación de memoria fuera del espacio de memoria.
- SIGABRT:
si el programa detecta un error, esta señal se genera mediante una llamada para abortar(). La biblioteca estándar también utiliza esta señal para informar de un error interno. La función assert() en c++ también usa abort() para generar esta señal.
C++
// Example of 'SIGABRT' error #include <iostream> using namespace std; int main() { int arr[5] = {1, 2, 3, 4, 5}; // SIGABRT error arr[6] = 6; return 0; } // This code is contributed by sarajadhav12052009
Producción:
Abort signal from abort(3) (SIGABRT)
- SIGSYS:
esta señal se envía al proceso cuando se pasa un argumento no válido a una llamada del sistema.
- SIGTRAP:
esta señal se envía al proceso cuando se produce una excepción. El depurador lo solicita para informarse. Por ejemplo, si una variable cambia su valor, esto la activará.
Consulte para: falla de segmentación (SIGSEGV) frente a error de bus (SIGBUS)