본문 바로가기
컴퓨터 관련/Linux || Unix

[unix/linux] 유닉스/리눅스 신호(signal)

by _BlankSpace 2017. 6. 18.

 0. 정리에 들어가기 전에.. 

요즘 들어서 트와이스였나요.. 사실 걸그룹에 관심이 별로 없는 저에게는 워낙 유명하니 들어본 이름이지만 무슨 노래를 불렀는 지 노래는 어떤 방식인지는 모릅니다.. 이거 아재인가요?


아무튼, 트와이스 노래 중에 시그널이라는 노래 제목이 있는 걸 보고 호기심이 생겼습니다.. 이걸 말할려는 건 아니고.. 이번에 정리할 내용이 유닉스와 리눅스의 시그널을 정리하려고 생각해봤는 데, 노래 가사처럼 시그널을 리눅스에 보낸다는 생각이 나서 적게되었습니다.


여튼, 이번 포스팅은 트와이스의 시그널처럼 우리가 리눅스와 유닉스와 같은 시스템에 보내거나, 받는 시그널의 종류를 정리하도록 하겠습니다.


 1. 시그널이란? 

시그널이란 한국 말로는 신호라고 할 수 있습니다. 이것은 유닉스나 비슷한 계열, POSIX 호환 OS 체제에서 쓰이느 제한된 형태의 프로세스 간 통신을 위한 신호라고 할 수 있습니다.


이러한, 신호는 프로세스나 동일한 프로세스 내의 특정 스레드로 전달되는 비동기식 통보 방식입니다. 또한, 이러한 신호들은 1970년대에 벨 연구소를 통해서 정립이 되고, 최근에는 POSIX 표준으로 정의가 되어 사용되고 있다고 합니다.


 2. 그럼 시그널은 어떻게 보내는 것일까? 

보통, 유저분들이 포토샵이나 워드 문서같은 프로그램을 쓰실 때, 뒤로 돌아가려 하신 경험이 있으실 것입니다. 그 때, 어떤 키 조합을 사용하셨나요? 이쯤 되면, 제가 어떤 말을 하는 지 아시는 분도 계실 것입니다.


그렇습니다. 이 때, Ctrl + Z 키를 사용하실 것입니다. 물론, 이것은 이번 포스팅에서 말하는 시그널과는 다른 개념일 수도 있습니다. 하지만, 다른 시선으로 본다면, 프로그램에 해당 키 조합을 보냄으로써, 뒤로 돌아가겠다는 시그널을 보내는 것과 같습니다.


어느정도 이해가 가시겠나요? 이러한 것처럼, 실행 중인 프로세스를 제어하는 터미널에서 특정한 키 조합을 입력한다면 시스템이 특정 시그널을 내보내게 됩니다.


Ctrl - C : (구 유닉스에서는 DEL): INT 신호 (SIGINT)를 내보냅니다. 기본적으로 프로세스를 종료하는 역할을 하고 있습니다. 리눅스를 사용하시는 유저라면 자주 사용하시는 키 조합일 것입니다.


Ctrl - Z : TSTP 신호 (SIGTSTP)를 내보냅니다. 기본적으로 프로세스가 실행을 유예시키는 역할을 합니다.


Ctrl - \ : QUIT 신호 (SIGQUIT)를 내보냅니다. 기본적으로 프로세스를 종료시킨 뒤 코어를 덤프하는 역할을 합니다.


Ctrl - T : (모든 종류의 유닉스에서 지원하고 있지 않음) : INFO 신호 (SIGINFO)를 내보냅니다. 커맨드에서 지원하는 경우 기본적으로 운영체제가 실행 중인 명령에 대한 정보를 표시합니다.


 3. 시그널의 종류는 무엇이 있을까? 

위의 키 조합을 통해서 시그널을 어떻게 보내는 지에 대해서 아셨을 것입니다. 그럼 이처럼 비슷한 시그널은 어떠한 것들이 있을 지 알아보겠습니다.


POSIX 신호


 신호

설명 

 SIGHUP

연결된 터미널이 hangup하였을 때 발생합니다.

 SIGINT

인터럽트 키를 입력하였을 때 발생합니다.

 SIGQUIT

quit key(^\)를 입력하였을 때 발생합니다.

 SIGILL

illegal instruction을 수행하였을 때 발생합니다.

 SIGTRAP

implementation defined hardwar fault 

 SIGABRT

abort 시스템 호출을 하였을 때 발생합니다.

 SIGBUS

implementation defined hardwar fault 

 SIGFPE

산술 예외, /0,  floating-point overflow 

 SIGKILL

프로세스를 킬하기 위한 시그널일 때 발생합니다.

 SIGUSR1

user defined signal 1 

 SIGSEGV

잘못된 메모리를 참조할 때 발생합니다.

 SIGUSR2

user defined signal 2 

 SIGPIPE

reader가 terminate된 파이프에 write할 경우에 발생합니다.

 SIGALRM

alarm 시스템 호출 후, 타이머가 expire된 경우에 발생합니다.

 SIGTERM

kill 시스템 호출이 보내는 sw termination 시그널에서 발생합니다. 

 SIGCHLD

자식 프로세스가 stop 또는 exit 되었을 때, 부모에게 전달되는 신호입니다. 

 SIGCONT

continue a stopped process. 

 SIGSTOP

sendable stop signal, cannot be caught or ignored. 

 SIGPOLL

폴링 가능한 이벤트입니다. 
 SIGPROF

프로파일링 타이머 시간 초과일 때, 발생합니다. 

 SIGSYS

불량 시스템 호출. 

 SIGTERM

종료 신호입니다. 

 SIGTTIN

백그라운드 프로세스를 읽기 시도할 경우 발생합니다. 

 SIGTTOU

백그라운드 프로세스를 쓰기 시도할 경우 발생합니다. 

 SIGXCPU

CPU 시간 제한이 초과할 경우 발생합니다. 

 SIGXFSZ

파일 크기 제한을 초과할 경우 발생합니다. 


제 글이 도움이 되셨거나 공감이 되시는 부분이 있으셨다면, 밑에 있는 공감 버튼 한 번씩 꾸욱 눌러주시면 감사하겠습니다.


공감 버튼은 저에게 큰 도움이 됩니다. 감사합니다.





댓글