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
SIG
es un común prefijo para los nombres de señal; SEGV
es una abreviatura de violación de segmento.
Uso
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
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
- ↑ «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).
- ↑ «System Interfaces Chapter 2» (en inglés). 2004. Consultado el 18-11-2009T06:51:28+00:00.
Enlaces externos
- Esta obra contiene una traducción derivada de «SIGSEGV» de Wikipedia en inglés, publicada por sus editores bajo la Licencia de documentación libre de GNU y la Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.