Signals Table

Program Error Signals

Signal Num DefaultAction Description
SIGFPE n/a Terminate
(core dump)
산술연산 에러를 나타냅니다. 이름은 floating-point exception 에서 왔지만 실질적으로 모든 산술연산 에러를 포함합니다. ( Floating/Integer division by zero, modulo operation by zero, Floating/Integer overflow ... )
SIGILL n/a Terminate
(core dump)
프로세스가 illegal, malformed, unknown, or privileged instruction 을 실행하려 하면 전달됩니다.
SIGSEGV n/a Terminate
(core dump)
프로세스에 할당된 메모리 주소 범위를 벗어나 참조하게 되면 segmentation violation 이 발생하고 신호가 프로세스에 전달됩니다. ( 또는 read-only memory 에 쓸경우 )
SIGBUS n/a Terminate
(core dump)
정렬되지 않은 메모리 주소를 사용하거나 존재하지 않는 물리적 주소를 사용하게 되면 프로세스에 전달됩니다.
SIGABRT 6 Terminate
(core dump)
프로그램 코드에서 비정상적인 종료를 할 경우를 나타내며 abort 함수를 이용해 종료할때 발생합니다.
SIGTRAP n/a Terminate
(core dump)
디버거에서 사용하는 신호로 특정함수 실행, 변수값 변경 같은 상황이 발생하면 전달됩니다.
SIGEMT n/a Terminate
(core dump)
software 로 emulation 되지 않은 instruction 이 실행되거나 OS 에서 emulation 실패가 발생하면 프로세스에 전달됩니다.
SIGSYS n/a Terminate
(core dump)
system call 을 할때 인수전달에 오류가 있으면 발생합니다. system call 을 하기위해 주로 libc 를 이용하므로 실질적으로 거의 발생하지 않습니다.

Termination Signals

Signal Num DefaultAction Description
SIGTERM 15 Terminate 프로세스에 종료를 요청할때 사용합니다. SIGKILL 과 달리 trap 하거나 ignore 할 수 있습니다. signal handler 를 이용하여 종료하기 전에 필요한 뒤처리 작업을 할 수 있습니다.
SIGINT 2 Terminate 실행중인 프로세스를 interrupt 할때 사용되는 신호로 터미널에서 Ctrl-c 키를 입력하면 프로세스에 전달되고 실행중인 프로세스는 종료됩니다.
SIGQUIT 3 Terminate
(core dump)
터미널에서 Ctrl-\ 키를 입력하면 발생하며 프로세스가 종료할때 추가로 core dump 합니다. 사용자에 의한 에러 발견으로 볼 수 있습니다.
SIGKILL 9 Terminate 이 신호를 받으면 프로세스는 즉시 종료합니다. SIGTERM, SIGINT 와 달리 trap 하거나 ignore 할 수 없으므로 필요한 뒤처리 작업을 할 수 없습니다.
SIGHUP 1 Terminate 터미널과 network, 모뎀 연결이 끊기거나 또는 터미널 프로그램이 종료될경우 모든 자손 프로세스들에 전달됩니다. 이 신호는 용도가 하나 더 있는데 daemon 프로세스에서 사용하는 설정파일을 수정할 경우 restart 할 필요 없이 이 신호를 보내면 설정파일을 reload 합니다.

Alarm Signals

Signal Num DefaultAction Description
SIGALRM 14 Terminate real or clock 시간을 나타내며 alarm or setitimer function 에서 설정한 값이 초과되면 발생합니다.
SIGVTALRM n/a Terminate 프로세스에서 사용한 CPU 시간이 alarm or setitimer function 에서 설정한 값을 초과했을 경우 발생합니다.
SIGPROF n/a Terminate 프로세스 에서 사용한 cpu 시간과 프로세스를 대신해 system call 을 하는데 소비된 cpu 시간이 alarm or setitimer function 에서 설정한 값을 초과했을 경우 전달됩니다. code profiling 하는 프로그램에서 사용됩니다.

Asynchronous I/O Signals

Signal Num DefaultAction Description
SIGIO n/a Ignore socket 이나 터미널 같은 FD (file descriptor) 에서 input 또는 output 할 준비가 되면 발생합니다. kernel 이 caller 를 대신해 FD 를 조사해 신호를 전달하므로 비동기 I/O requests 만드는데 사용할 수 있습니다.
SIGURG n/a Ignore socket 에서 urgent or out-of-band 데이터가 도착하면 전달됩니다.
SIGPOLL n/a Ignore System V 신호이름으로 SIGIO 와 같습니다. (호환성 유지를 위해 정의됨)

Job Control Signals

Signal Num DefaultAction Description
SIGCHLD n/a Ignore child 프로세스가 terminate, stop, continue 상태 변경이 되면 parent 프로세스에 전달됩니다.
SIGCONT n/a Continue SIGSTOP, SIGTSTP 신호로 중단된 프로세스를 다시 시작합니다. ( 실행중인 프로세스에서는 무시됩니다. )
SIGSTOP n/a Stop 이 신호를 받으면 프로세스는 즉시 정지합니다. trap 하거나 ignore 할 수 없습니다.
SIGTSTP n/a Stop 터미널에서 Ctrl-z 키를 입력할때 발생하며 SIGSTOP 과는 달리 trap 하거나 ignore 할 수 있습니다.
SIGTTIN n/a Stop background process 가 tty 로부터 읽기를 시도하면 전달됩니다.
SIGTTOU n/a Stop background process 가 tty 로 쓰기를 시도하면 전달됩니다. 터미널 옵션 tostop 가 enable 되어있어야 합니다. ( stty -a 로 값을 볼수있음 )

Operation Error Signals

Signal Num DefaultAction Description
SIGPIPE n/a Terminate broken pipe 를 나타냅니다. writer 가 파이프로 데이터를 쓰고 있는중에 reader 가 종료하거나 또는 connect 되지 않은 socket 에 데이터를 전송하면 발생합니다.
SIGLOST n/a Terminate Resource lost 를 의미합니다. 가령 NFS 에서 파일에 lock 을 가지고 있는데 NFS 서버가 reboot 된다면 lock 을 잃어버리게 되어 신호가 프로세스에 전달됩니다.
SIGXCPU n/a Terminate 사용가능한 CPU 시간 ( soft limit ) 을 초과했을 경우 전달되며 신호를 받은 프로세스는 필요한 뒤처리 작업을 할수있고 이후에 OS 의 SIGKILL 신호에 의해 종료됩니다.
SIGXFSZ n/a Terminate 시스템에서 사용가능한 파일크기 ( soft limit ) 을 초과하려 할때 발생합니다.

Miscellaneous Signals

Signal Num DefaultAction Description
SIGUSR1 n/a Terminate 사용자가 정의하여 사용할 수 있는 신호입니다 1.
SIGUSR2 n/a Terminate 사용자가 정의하여 사용할 수 있는 신호입니다 2.
SIGWINCH n/a Ignore 터미널 윈도우 사이즈가 변경되었을때 프로세스에 전달됩니다.
SIGINFO n/a Ignore 터미널의 foreground process group 에 모두 전달되며 group leader 일경우 시스템 상태정보와 프로세스가 실행중인 작업에 대한 정보를 표시합니다.

Real time signals

SIGRTMIN ~ SIGRTMAX 는 real time signal 입니다. 유닉스 표준 시그널에서는 시그널이 블럭될 경우 하나의 시그널만 유지하고 나머지는 모두 잃어 버리지만 RTS 는 블럭되더라도 시그널의 queue 를 유지합니다. 또한 ordering 도 보장하는데 블럭된 상태에서 각기 다른 번호의 신호들이 도착될 경우 작은 번호의 신호가 먼저 전달됩니다. RTS 은 커널에 의해 사용되지 않습니다.

RTS 는 비동기 이벤트를 전달하기 위한 목적으로 만들어 졌으며, 주로 네트워크 애플리케이션 작성시 소켓 이벤트를 통보하기 위해서 사용합니다. RTS 는 네트워크 입출력에 있어서 polling 에 비해 월등한 성능 향상을 보장해 줍니다. 시그널의 장점인 실시간성을 유지하면서 단점인 queue 부재의 문제를 해결한 향상된 시그널 도구라고 할 수 있습니다.

Shell 에서 trap 설정에 real time signal 을 사용할 경우 queuing, ordering 보장이 되지 않습니다.
그냥 SIGUSR 신호가 다른 이름으로 여러 개 추가된 것과 같습니다.


Num

신호이름 대신에 번호를 사용할 수 있는데요. POSIX standard 로 정해진 것은 몇개 안되고 나머지는 OS 마다 틀리다고 합니다.

trap '...' HUP INT QUIT TERM

trap '...' 1 2 3 15

--------------------------------

trap '...' EXIT

trap '...' 0

DefaultAction

  • Terminate
    프로세스를 종료합니다.

  • Terminate (core dump)
    프로세스를 종료하고 추가적으로 core 파일을 생성합니다.

  • Ignore
    신호를 무시합니다.

  • Stop
    프로세스를 stop 합니다. ( 종료하는 것은 아닙니다. )

  • Continue
    프로세스가 stopped 상태일 경우 실행을 재개합니다. ( 실행 중에는 무시됩니다. )