SIGSEGV

c or linux 2010. 10. 25. 14:53


요즘에 jvm 이 killed 되고 있는데. jvm 버그의 영향이 있다. SIGSEGV 때문이다.


 http://database.sarang.net/study/glibc/21.htm


매크로 : int SIGSEGV

이 시그널은 할당된 메모리의 범위를 벗어나는곳에서 읽거나, 쓰기를 시도할 때 발생 된다. ( 실제로, 그 시그널들은 프로그램이 충분한 영역을 할당받지 못할 때 시스템 메모리 보호 메커니즘에 의해서 발생한다. ) 그 이름은 "segmentation violation"의 약자이다. SIGSEGV 상황이 발생되는 가장 일반적인 방법은 비참조 되는 널( defeferencing a null) 이나 초기화되지 않은 포인터에 의한 것이다. 널 포인터는 주소 0으로 참조되고, 대부분의 운영체제는 이 주소가 정확하게 유용하지 않음을 확실히 하기 때문에 비참조 널 포인터는 SIGSEGV가 발생될 것이다. (어떤 운영체제는 주소가 0인 메모리도 유용하고, 비참조 널 포인터는 그들 시스템상에서는 시그널을 발생하지 않는다. ) 비초기화된 포인터에서는, 유용하지 않거나, 유용하더라도 임의의 주소들을 갖게된다. SIGSEGV 상황이 얻어지는 다른 일반적 방법은 배열에 포인터를 사용했을 때 그 배열의 끝을 체크하기를 실패했을 때이다.


 

SEGV는 Segmentation Violation으로 메모리 침범으로 어플이 죽을 때 발생된다.
참고로  서로의 쓰레드가 독립적입을 보장받기 위해서 서로다른 영역을 참조하든지 혹은 쓰레드에 대해서 메모리 동기화를 하지 않을 때 SIGSEGV가 발생된다.

'c or linux' 카테고리의 다른 글

리눅스 커널 시간 이해하기  (0) 2010.11.03
tid 정보 보기  (0) 2010.10.27
RTP 이용한 솔루션  (0) 2010.10.22
간단 socket 연결 예제  (0) 2010.10.21
__LINE__, __FILE__, __func__  (0) 2010.10.21
Posted by '김용환'
,