시그널의 사전적인 뜻은 ‘신호’라는 의미로 리눅스에서는 프로세스끼리 서로 통신할 때 사용한다. 즉, 특정 프로세스가 다른 프로세스에 메시지를 보낼 때 시그널을 이용한다. 리눅스에서 사용하는 시그널에는 사용자가 인터럽트 키를 통해 발생하는 시그널, 프로세스가 발생하는 시그널, 하드웨어가 발생하는 시그널 등 매우 다양하다.
kill -l #확인 방법
HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2
시그널은 고유의 의미를 내포하고 있다. 이러한 시그널을 받은 실행객체인 프로세스는 그에 맞는 행동을 해야 한다. 시그널을 받은 프로세스는 다음중 한가지 행동을 취해야 한다.
전화벨이 울리면 전화를 받거나 무시하거나 할 수 있을 것이다. 각각 1, 2번에 해당한다.
만약 시그널을 무시하지도 않고, 호출할 함수도 등록하지 않았다면 시그널에 대한 기본행동을 취하게 된다. 이 기본행동에는 다음과 같은 것들이 있다.
예를들어 CTRL+C 을 입력하면, SIGINT 신호가 발생되는데, 시그널에 대한 행동을 정하지 않았다면, 기본행동인 프로세스 종료를 취하게 된다.
대기열을 가지지 않는다.
프로세스는 동시에 하나의 시그널만 처리할 수 있다. 한 시그널을 처리하는 도중에 다른 시그널을 받는다면 기존의 시그널을 잃어버린다.
비신뢰성
프로세스에 시그널이 잘 전달되었는지 확인하지 않는다.