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 상태일 경우 실행을 재개합니다. ( 실행 중에는 무시됩니다. )