시그널
- 특정 이벤트가 발생했을 때 신호를 보내 알려주는 것
- 리눅스에서는 프로세스 끼리 서로 통신할때 사용
- 인터럽트라고도 부른다
- kill 명령 사용시 지정한 시그널이 없다면 기본적으로 TERM 시그널 보내짐
시그널 분류
- 사용자의 인터럽트 키를 통해 발생하는 시그널
- 프로세스가 발생시키는 시그널
- 하드웨어가 발생시키는 시그널
시그널 종류 확인
kill -l
시그널 종류
- SIGHUP(HUP): 프로세스 재시작. 로그아웃과 같이 터미널에서 접속이 끊겼을때 보내지는 시그널. 데몬관련 환경 설정 파일을 변경시키고 변화된 내용을 적용하기 위해 재시작할때 사용
- SIGINT(INT, 2): 프로세스 인터럽트, ctrl+C와 같다. 키보드로부터 오는 인터럽트 시그널. 실행 중지
- SIGILL(ILL): Illegal Instruction. 잘못된 명령어 사용시 발생
- SIGKILL(KILL, 9): kill signal, 많이 쓰이는 시그널 9번이다. 프로세스 강종
SIGTERM(TERM): 프로세스 정상 종료. kill 명령의 기본 시그널
- SIGTSTP(TSTP) 20번: ctrl + z 입력시 발생. 실행 정지 후 실행을 계속하기 위해 대기시키는 시그널 / TSTP: terminal STOP의 약자
- SIGSTOP(STOP): 터미널에서 입력된 정지 시그널. 무시될 수 없음.
- SIGQUIT(QUIT): 키보드로부터 오는 시그널 중지. 코어 덤프( ctrl + )
- SIGCONT(CONT): STOP에 의해 정지된 시그널 다시 실행
프로세스에 시그널 보내기
프로세스에 시그널을 보내기 위해 kill 명령을 이용한다
# kill -SIGNUM PID
kill -9 11
시그널 핸들러
시그널 발생시 원하는 동작을 설정할 수 있다
sigaction 함수를 통해 정의할 수 있다.
SIGTERM vs SIGKILL
- SIGKILL은 바로 죽여버린다. 잔인하게...
- SIGTERM은 자식들에게 죽음을 알린다. 자식들도 작업 종료 / 작업을 끝날때까지는 기다려주는 듯??