2011년 2월 17일 목요일

SIGSEGV 란 용어에 대해

sigsegv 검색을 통해 유입된 내역이 하나 보여서 잠깐 설명.


Unix 계열(Linux든 BSD든 OS X든)에서는 시그널(signal)이란게 있다. 자세한 설명은 배재. 그냥 프로그램과 OS 및 Shell 등 타 프로그램 (그리고 유저입력?) 사이에 메시지 등을 전달하기 위한 메카니즘이라고 하면 되려나. (설마 DOS나 Windows계열도 있으려나?)

이 시그널 중에 대표적인게 SIGINT와 SIGSEGV가 있다. 이름이 SIG로 시작되는데 Signal의 약자로 보면 되겠다.

SIGINT는 (오래되서 기억이 잘 안나는데) 흔히 Ctrl-c를 누르면 발생되는데 프로그램 종료를 위해 많이 캐치하는 시그널이다. INT의 의미는 인터럽트(Interrupt)로 기억한다...

SIGSEGV는 친구들 사이에서 '똥싸고 죽는다'라고 부른다. 길게 Segmentation Violation 혹은 Segmentation Fault라 불리우는 이 시그널은 '비정상종료' 혹은 '메모리엑세스 오류' 혹은 '미친짓' 등등 -_- 으로 인해 OS에 의해 강제로 종료될 때 발생하고, Unix 계열에선 이 경우 메모리덤프 파일인 core를 남기고 죽는다고 해서 '똥싸고 죽는다' 라고 표현한다. (core를 이용해 디버깅을 할 수 있는 친절한 유닉스 ㅠㅠ) 윈도우 계열에서는 보기싫은 에러 다이얼로그가 뜨면서 죽기 때문에 역시 '똥싸고 죽는구나' 라고 표현이 가능할지도...

요즘처럼 GUI가 대세인 시대에는 거의 안쓰이는 거겠지만 뭐 기록으로라도 남겨놓자. 후후후...

ps. 블로그이름에 SIGSEGV를 쓴 이유는 '빌어먹을 내 머리'를 위한 비유다 -ㅁ-

댓글 없음 :