{{위키데이터 속성 추적}}
'''신호'''는 [[유닉스]], [[유닉스 계열]], [[POSIX]] 호환 운영 체제에 쓰이는 제한된 형태의 [[프로세스 간 통신]]이다. 신호는 프로세스나 동일 프로세스 내의 특정 스레드로 전달되는 비동기식 통보이다. 이러한 신호들은 1970년대 [[벨 연구소]]를 통해 존재한 뒤로 최근의 시기에는 [[POSIX]] 표준에 정의되어 있다.

== 역사 ==
[[리서치 유닉스|버전 1 유닉스]]는 별도의 [[시스템 호출]]을 사용하여 인터럽트를 잡고 종료하고 머신 트랩을 수행하였다. [[리서치 유닉스|버전 4 유닉스]] 들어 모든 트랩을 하나의 호출 '신호'로 병합하였으며 [[버전 7 유닉스|버전 7]]에서 숫자마다 매겨진 각 트랩이 상징적인 이름을 가져가게 되었다. kill이 [[리서치 유닉스|버전 2]]에 등장하였으며 [[리서치 유닉스|버전 5]]에서는 임의의 신호들을 내보낼 수 있게 되었다.<ref name="reader">{{기술보고서 인용 |first1=M. D. |last1=McIlroy |authorlink1=Doug McIlroy |year=1987 |url=http://www.cs.dartmouth.edu/~doug/reader.pdf |제목=A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 |series=CSTR |number=139 |institution=Bell Labs}}</ref>

== 신호 보내기 ==
실행 중인 프로세스의 [[컴퓨터 터미널|제어 터미널]]에서 특정 키 조합을 입력하면 시스템이 특정 신호를 내보낸다:

* [[Ctrl-C]] (구 유닉스에서는 DEL): INT 신호 (SIGINT)를 내보낸다. 기본적으로 프로세스를 종료하는 역할을 한다.
* [[Ctrl-Z]]: TSTP 신호 (SIGTSTP)를 내보낸다. 기본적으로 프로세스가 실행을 유예시키는 역할을 한다.
* [[Ctrl-\]]: QUIT 신호 (SIGQUIT)를 내보낸다. 기본적으로 프로세스를 종료시킨 뒤 코어를 덤프하는 역할을 한다.
* [[Ctrl-T]] (모든 종류의 유닉스에서 지원하지는 않음): INFO 신호 (SIGINFO)를 내보낸다. 명령에서 지원하는 경우 기본적으로 운영 체제가 실행 중인 명령에 대한 정보를 표시한다.

현대 운영 체제에서 이러한 기본 키 조합들은 <code>[[stty]]</code> 명령으로 변경할 수 있다.

== POSIX 신호 ==
{| class="wikitable sortable"
|-
! 신호 !! 이식 가능한 번호 !! 기본 동작 !! 설명
|-
| 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 || 없음 || 무시 || 터미널 창 크기가 변경됨.
|}

== 같이 보기 ==
* [[C 시그널 처리]]
== 각주 ==
{{각주}}

== 외부 링크 ==
* {{언어링크|en}} [http://people.cs.pitt.edu/~alanjawi/cs449/code/shell/UnixSignals.htm Unix Signals Table, Ali Alanjawi, University of Pittsburgh] {{웨이백|url=http://people.cs.pitt.edu/~alanjawi/cs449/code/shell/UnixSignals.htm |date=20150819230237 }}
* {{언어링크|en}} [http://man7.org/linux/man-pages/man7/signal.7.html Man7.org Signal Man Page]
* {{언어링크|en}} [https://web.archive.org/web/20071101082659/http://users.actcom.co.il/~choo/lupg/tutorials/signals/signals-programming.html Introduction to Unix Signals Programming]
* {{언어링크|en}} [http://www.linuxprogrammingblog.com/all-about-linux-signals Another Introduction to Unix Signals Programming] {{웨이백|url=http://www.linuxprogrammingblog.com/all-about-linux-signals |date=20150811035518 }}
* {{언어링크|en}} [http://www.enderunix.org/docs/signals.pdf UNIX and Reliable POSIX Signals] {{웨이백|url=http://www.enderunix.org/docs/signals.pdf |date=20160303180321 }} by Baris Simsek
* {{언어링크|en}} [http://www.openbsd.org/papers/opencon04/index.html Signal Handlers] by Henning Brauer

[[분류:프로세스 간 통신| ]]
[[분류:제어 흐름]]