signal

sigal이란?

시그널의 사전적인 뜻은 ‘신호’라는 의미로 리눅스에서는 프로세스끼리 서로 통신할 때 사용한다. 즉, 특정 프로세스가 다른 프로세스에 메시지를 보낼 때 시그널을 이용한다. 리눅스에서 사용하는 시그널에는 사용자가 인터럽트 키를 통해 발생하는 시그널, 프로세스가 발생하는 시그널, 하드웨어가 발생하는 시그널 등 매우 다양하다.

시그널 목록

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. 시그널을 무시한다.
  3. 시그널을 무시하지 않지만, 그렇다고 해서 특별히 함수를 호출하지도 않는다.

전화벨이 울리면 전화를 받거나 무시하거나 할 수 있을 것이다. 각각 1, 2번에 해당한다.

만약 시그널을 무시하지도 않고, 호출할 함수도 등록하지 않았다면 시그널에 대한 기본행동을 취하게 된다. 이 기본행동에는 다음과 같은 것들이 있다.

  1. 프로세스가 죽는다. 대부분의 시그널에 대한 기본행동
  2. 프로세스가 중단된다.
  3. 아무일 없이 지나간다. - 무시된다.

예를들어 CTRL+C 을 입력하면, SIGINT 신호가 발생되는데, 시그널에 대한 행동을 정하지 않았다면, 기본행동인 프로세스 종료를 취하게 된다.

시그널의 특징