SIGSEGV

De Wikipedia, la enciclopedia libre
SIGSEGV
Descripción referencia de memoria Inválida
Acción por defecto Terminación anormal del proceso
SA_SIGINFO macros
SEGV_MAPERR La dirección no es asignada al objeto
SEGV_ACCERR Permisos no válidos para el objeto mapeado

En plataformas compatible con POSIX, SIGSEGV es la señal enviada a un proceso cuando se hace una referencia a memoria no válida, o fallo de segmentación . La constante simbólica para SIGSEGV se define en el archivo de cabecera signal.h . Los nombres simbólicos de señales se utilizan porque los números de las señales pueden variar en diferentes plataformas; en la práctica suele ser la señal número 11.[1]

Etimología[editar]

SIG es un común prefijo para los nombres de señal; SEGV es una abreviatura de violación de segmento.

Uso[editar]

Los programas de computadora pueden lanzar SIGSEGV para el manejo incorrecto de memoria (ver fallo de segmentación). El sistema operativo puede informar a la aplicación de la naturaleza del error utilizando la pila de señales, que los desarrolladores pueden utilizar para depurar sus programas o manejo de errores.

La acción predeterminada para un programa después de recibir SIGSEGV es la terminación anormal. Esta acción terminará el proceso, pero puede generar un archivo central para ayudar a la depuración, o realizar alguna otra acción dependiendo de la plataforma. Por ejemplo, Linux utilizando grsecurity puede registrar señales SIGSEGV para controlar los intentos de intrusión mediante desbordamientos de buffer.

SIGSEGV puede ser capturado, es decir, las aplicaciones pueden solicitar las medidas que quieren que ocurra en lugar de la acción por defecto. Ejemplos de tal acción podría ser ignorarla, llamar a una función, o la restauración de la acción predeterminada. En algunas circunstancias, ignorar SIGSEGV resulta en un comportamiento indefinido.[2]

Un ejemplo de una aplicación que podría manejar SIGSEGV es un depurador, que podría ver la pila de señales e informar a los desarrolladores de lo que sucedió, y donde se terminó el programa.

SIGSEGV suele ser generado por el sistema operativo, pero los usuarios con los permisos adecuados pueden utilizar la llamada al sistema kill o el comando kill para enviar la señal a un proceso a su antojo.

AIX[editar]

En el sistema operativo AIX, para ejecutables de 32 bits, SIGSEGV se puede generar debido a la insuficiencia de tamaño de segmento. Por la forma en que está diseñado el modelo de memoria de AIX, los segmentos por defecto tienen un tamaño fijo (256 Mb). En el caso de un proceso solicite más memoria que esta, se produce una violación de segmento y el sistema operativo envía una señal SIGSEGV al proceso. Para resolver esto, se puede vincular con -bmaxdata=<num> o establecer la variable de entorno de ejecución LDR_CNTRL=MAXDATA.

Referencias[editar]

  1. «sourceware.org Git - glibc.git/blob - bits/signum.h» (en inglés). 6 de julio de 2001. Consultado el 18-11-2009T05:37:46+00:00.  (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última).
  2. «System Interfaces Chapter 2» (en inglés). 2004. Consultado el 18-11-2009T06:51:28+00:00. 

Enlaces externos[editar]