개발 창고/Server

[Linux] How to use the Signal

로이제로 2023. 11. 10. 22:00
반응형

 

1/ 시그널(Singnal)이란?

특정 이벤트가 발생하였을 경우 프로세스에 전달되는 신호(Signal)

  • 오류 발생, 자식 프로세스의 종료, 사용자의 종료 요청 등
  • 굉장히 작은 값
  • 인터럽트(Interrupt)라고도 함
  • 용도가 제한적이며 중복 시그널에 따른 원치 않는 결과가 발생하기도 함

 

2/ 시그널을 확인하는 방법

$> kill -l

Ubuntu에서 kill -l을 호출한 결과

$> man 7 signal

Ubuntu에서 man 7 signal을 호출한 결과

$> cat /usr/include/asm/signal.h

CentOS에서 man 7 signal을 호출한 결과

번호 이름 설명 기본 처리
1 SIGHUP
(HUP)
HangUP의 약어로 로그아웃과 같은 터미널에서 접속이 끊겼을 때 보내지는 시그널입니다.
데몬 관련 환경 설정 파일을 변경시키고 변화된 내용을 적용하기 위해 재시작할 때 이 시그널이 사용됩니다.
종료
2 SIGINT
(INT)
키보드로부터 오는 인터럽트 시그널로 실행을 중지. [CTRL] + [c] 입력 시에 보내지는 시그널입니다. 종료
3 SIGQUIT
(QUIT)
키보드로부터 오는 실행 중지 시그널.
[CTRL] + [\] 입력 시에 보내지는 시그널입니다. 기본적으로 프로세스를 종료시킨 뒤 코어를 덤프하는 역할을 합니다.
코어 덤프
4 SIGILL
(ILL)
illegal instruction의 약자입니다. 잘못된 명령을 사용했을 때 발생합니다. 코어 덤프
5 SIGTRAP
(TRAP)
trace(추적). breakpoint(중지점)에서 TRAP 발생할 때 코어 덤프
6 SIGABRT
(ABRT)
abort의 약자로 비정상종료 함수에 의해 발생합니다. (즉, abort 시스템 호출을 하였을 때 발생) 코어 덤프
7 SIGBUS 메모리 접근 에러 시 발생하는 시그널입니다. 코어 덤프
9 SIGKILL
(KILL)
KILL! 무조건 종료, 즉 프로세스를 강제로 종료 시키는 시그널! 종료
11 SIGSEGV invalid memory reference 종료 + 코어 덤프
15 SIGTERM
(TERM)
Terminate의 약자로 가능한 정상 종료 시키는 시그널로 kill 명령의 기본 시그널입니다. 종료
17 SIGCHLD
(child)
자식 프로세스가 stop 되거나 종료되었을 때 부모에게 전달되는 신호입니다. 무시
18 SIGCONT
(CONT)
Continue의 약자로 STOP 시그널에 의해 정지된 프로세스를 다시 실행시킬 때 사용됩니다. 재시작
19 SIGSTOP
(STOP)
터미널에서 입력된 정지 시그널입니다. SIGCONT로 재실행시킬 수 있습니다. 중지
20 SIGTSTP
(TSTP)
실행 정지 후 다시 실행을 계속하기 위해 대기시키는 시그널입니다.
[CTRL] + [z]를 입력했을 때 보내지는 시그널입니다.
SIGCONT로 역시 다시 실행시킬 수 있습니다.
중지
29 SIGIO 비동기 입출력이 발생했을 경우! (I/O now possible!) 종료

 

3/ SIGNAL HANDLER

특정 시그널을 감지했을 때 처리되는 별도의 함수

  1. 특정 시그널 감지
  2. 현재 작업 일시 중단
  3. SIGNAL HANDLER 실행
  4. SIGNAL HANDLER 완료
  5. 중단된 작업 재개
반응형