-
[Unix] 시그널운영체제/Unix 2019. 5. 14. 18:03
시그널
- 시그널
- 시그널 처리
- 시그널 보내기
- 시그널과 비지역 점프
목표
- 시그널의 개념에 대해 이해한다.
- 시그널의 필요성 및 종류에 대해 알아본다.
시그널이란?
- 시그널 - 신호(signal) 위험한 상황에 일반적으로 신호를 보낸다.
- 프로그램 실행 중 예기치 않은 사건이 발생할 때 프로세스에게 알려주는 특별한 메시지 또는 소프트웨어 인터럽트
- 예기치 않은 사건 : 프로그램이 무한루프에 빠져나오질 못함.
- 특별한 메시지, 소프트웨어 인터럽트인 : <ctrl + c>를 눌러 프로그램 강제 종료
이때 <ctrl + c>는 강제 종료 시그널
시그널 종류
- SIGFPE : SIGnal + Floating-Point Exception - 0으로 나누기, 부동 소수점 오류
- SIGPWR : SIGnal + PoWeR - 정전 시
- SIGINT : SIGnal + INTerrupy - 키보드로부터 종료 요청 <ctrl + c>
- SIGSTP : SIGnal + SToP - 키보드로부터 중지 요청 <ctrl + z>
- SIGALRM : SIGnal + ALaRM - 알람시계 울림
=> 알람시계가 울리고 프로세스는 종료된다 - SIGCHLD : SIGnal + CHiLDren - 자식 프로세스 종료
- SIGSEGV : SIGnal +SEGment - 유효하지 않는 메모리 참조
=> 포인터가 잘못된 메모리 주소를 찾을 때 나오는 오류 Segment!!
시그널 예시
1) 터미널 실행
#include <stdio.h> int main() { while (1); // 무한 루프를 도는 프로그램 작성 }
위와 같이 무한 루프라는 예기치 않은(?) 상황에 빠졌다. 시그널을 보내서 빠져나오자 <ctrl + c>
2) 코드 실행
- alarm
#include <unistd.h> #include <stdio.h> /* 알람 시그널을 보여주는 프로그램 */ int main( ) { int sec = 0; alarm(5); // 5초뒤 알람 실행 printf("infinite loop \n"); while (1) { // 반복문 sleep(1); // 1초대기 printf("%d sec passed\n", ++sec); } printf("not run \n"); }
- 5초 뒤 자동으로 알람이 실행되면서 프로그램이 종료된다.
- 이때 한 프로세스당 하나의 알림만 설정할 수 있다.
정리 및 느낀 점
- 시그널은 어떠한 예기치 못한 상황에서의 처리를 도와준다.
- 대표적인 시그널인 <ctrl + c >에 대해, alarm 시그널에 대해 알아보고 구현해보았다.
728x90'운영체제 > Unix' 카테고리의 다른 글
[Unix] 한눈에 보는 유닉스 (0) 2019.05.18 [Unix] 시그널 처리 (0) 2019.05.14 [Unix] 파일 상태 정보 (0) 2019.05.08 [Unix] 파일 잠금 함수 : fcntl() (0) 2019.05.08 [Unix] 파일 및 레코드 잠금 (0) 2019.05.08