신호는 유닉스, 유닉스 계열, POSIX 호환 운영 체제에 쓰이는 제한된 형태의 프로세스 간 통신이다. 신호는 프로세스나 동일 프로세스 내의 특정 스레드로 전달되는 비동기식 통보이다. 이러한 신호들은 1970년대 벨 연구소를 통해 존재한 뒤로 최근의 시기에는 POSIX 표준에 정의되어 있다.
역사
버전 1 유닉스는 별도의 시스템 호출을 사용하여 인터럽트를 잡고 종료하고 머신 트랩을 수행하였다. 버전 4 유닉스 들어 모든 트랩을 하나의 호출 '신호'로 병합하였으며 버전 7에서 숫자마다 매겨진 각 트랩이 상징적인 이름을 가져가게 되었다. kill이 버전 2에 등장하였으며 버전 5에서는 임의의 신호들을 내보낼 수 있게 되었다.[1]
신호 보내기
실행 중인 프로세스의 제어 터미널에서 특정 키 조합을 입력하면 시스템이 특정 신호를 내보낸다:
- Ctrl-C (구 유닉스에서는 DEL): INT 신호 (SIGINT)를 내보낸다. 기본적으로 프로세스를 종료하는 역할을 한다.
- Ctrl-Z: TSTP 신호 (SIGTSTP)를 내보낸다. 기본적으로 프로세스가 실행을 유예시키는 역할을 한다.
- Ctrl-\: QUIT 신호 (SIGQUIT)를 내보낸다. 기본적으로 프로세스를 종료시킨 뒤 코어를 덤프하는 역할을 한다.
- Ctrl-T (모든 종류의 유닉스에서 지원하지는 않음): INFO 신호 (SIGINFO)를 내보낸다. 명령에서 지원하는 경우 기본적으로 운영 체제가 실행 중인 명령에 대한 정보를 표시한다.
현대 운영 체제에서 이러한 기본 키 조합들은 stty
명령으로 변경할 수 있다.
POSIX 신호
신호 |
이식 가능한 번호 |
기본 동작 |
설명
|
SIGABRT |
6 |
종료 (코어 덤프) |
프로세스 중단 신호
|
SIGALRM |
14 |
종료 |
알람 클럭
|
SIGBUS |
없음 |
종료 (코어 덤프) |
정의되지 않은 메모리 오브젝트의 일부분에 접근.
|
SIGCHLD |
없음 |
무시 |
차일드 프로세스 종료, 중단, 계속
|
SIGCONT |
없음 |
계속 |
정지하지 않으면 계속 실행.
|
SIGFPE |
8 |
종료 (코어 덤프) |
오류가 있는 산술 조작.
|
SIGHUP |
1 |
종료 |
행업(Hangup).
|
SIGILL |
4 |
종료 (코어 덤프) |
유효하지 않은 명령.
|
SIGINT |
2 |
종료 |
터미널 인터럽트 신호.
|
SIGKILL |
9 |
종료 |
킬 (신호를 잡거나 무시할 수 없음).
|
SIGPIPE |
13 |
종료 |
신호를 읽는 사용자가 없는 상태에서 파이프에 기록.
|
SIGPOLL |
없음 |
종료 |
폴링 가능한 이벤트.
|
SIGPROF |
없음 |
종료 |
프로파일링 타이머 시간 초과.
|
SIGQUIT |
3 |
종료 (코어 덤프) |
터미널 종료 신호.
|
SIGSEGV |
11 |
종료 (코어 덤프) |
잘못된 메모리 참조.
|
SIGSTOP |
없음 |
정지 |
실행 정지 (신호를 잡거나 무시할 수 없음)
|
SIGSYS |
없음 |
종료 (코어 덤프) |
불량 시스템 호출.
|
SIGTERM |
15 |
종료 |
종료 신호.
|
SIGTRAP |
5 |
종료 (코어 덤프) |
트레이스/브레이크포인트 트랩.
|
SIGTSTP |
없음 |
정지 |
터미널 정지 신호.
|
SIGTTIN |
없음 |
정지 |
백그라운드 프로세스 읽기 시도.
|
SIGTTOU |
없음 |
정지 |
백그라운드 프로세스 쓰기 시도.
|
SIGUSR1 |
없음 |
종료 |
사용자 정의 신호 1.
|
SIGUSR2 |
없음 |
종료 |
사용자 정의 신호 2.
|
SIGURG |
없음 |
무시 |
높은 대역의 데이터를 소켓에서 이용 가능.
|
SIGVTALRM |
없음 |
종료 |
가상 타이머 시간 초과.
|
SIGXCPU |
없음 |
종료 (코어 덤프) |
CPU 시간 제한 초과.
|
SIGXFSZ |
없음 |
종료 (코어 덤프) |
파일 크기 제한 초과.
|
SIGWINCH |
없음 |
무시 |
터미널 창 크기가 변경됨.
|
같이 보기
각주
외부 링크