Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- dynamic programming
- redis
- OOM
- Go언어
- Python
- go
- 튜토리얼
- Java
- Linux
- 코드워
- HBase
- codewars
- golang
- 자바
- 동적프로그래밍
- 알고리즘
- leetcode
- docker
- scala
- 스칼라
- boj
- 문제풀이
- 프로그래머스
- zookeeper
- gradle
- programmers
- 파이썬
- 리눅스
- DP
- 주키퍼
Archives
- Today
- Total
파이문
Java ShutdownHook With Signal 본문
728x90
자바로 코드를 작성할 때 gracefully 하게 종료하기 위해 ShutdownHook 을 사용하곤 한다.
Runtime.getRuntime().addShutdownHook(new Thread(() -> { ... }));
프로세스를 중지하는 시나리오가 잘 있으면 좋겠지만, 강제 종료할 경우도 꽤 있을 것이다.
강제 종료의 경우 인터럽트 시그널인 kill -9 를 자주 썼었다. (각 시그널 번호가 뜻하는 의미는 인터넷에 매우 많으니 패스)
SIGKILL (kill -9) 를 해도 ShutdownHook 이 되는지가 궁금했는데 결론부터 말하자면 안된다.
만약 프로세스 ShutdownHook 이 동작하게 하고 싶다면 SIGTERM(15)을 사용하도록 하자. (참고로 SIGINT(2) 도 된다. 인텔리제이에서의 중단은 SIGINT 로 동작한다.)
SIGTERM 과 SIGKILL 둘다 process 를 termination 시키는 것이다.
- SIGTERM 은 gracefully 하게 프로세스를 종료 시키는 것이고 SIGKILL 은 프로세스를 즉시 종료 시킨다.
- SGITERM 시그널은 처리하고, 무시하고, 블락할 수 있지만 SIGKILL 은 처리하거나 블락할 수 없다.
- SIGTERM 은 자식 프로세스를 죽이진 않지만 SIGKILL 은 자식 프로세스도 죽인다.
덧붙이자면 리눅스에서 OOM Killer 는 SIGKILL 로 죽인다고 한다.
참고
linuxhandbook.com/sigterm-vs-sigkill/
stackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill-signal-in-java
'TIL' 카테고리의 다른 글
[Hadoop] TableReducer 로 테이블 여러개 사용하기 (0) | 2020.11.20 |
---|---|
셸 업그레이드 후 zsh 가 안되는 문제 (0) | 2020.11.06 |
[Redis] 레디스는 싱글 쓰레드인데 어떻게 동시에 접근하지? (0) | 2020.10.27 |
[HBase] 테이블 별 용량 확인하기 (0) | 2020.10.20 |
[Ansible] 디렉토리 생성 하기 (0) | 2020.09.17 |
Comments