티스토리 뷰
signal과 event
1-1. kill은 용도에 맞지 않게 이름이 지어짐.
1-2. kill이 실행되면 signal을 프로세스에게 보냄.
1-3. signal은 software interrupt의 일종으로 어떤 event가 발생했음을 프로세스에게 알려주는 매커니즘.
1-4. 리눅스의 목록은 /usr/include/singal.h에 정의 되어있고, kill -l로도 전체 시그널 목록 확인 가능.
signal handler
2-1. signal 발생은 비동기 작업이며, 개발자는 프로그램을 특정 시그널을 수신했을 때 실행되기를 바라는 함수를 등록가능.
2-2. signal handler를 지정하지 않았을 경우 커널에 기본 정의된 액션을 실행하고, 기본 액션은 시그널의 종류에 따라 다름.
action | 기본동작 |
TERM | 시그널을 수신한 프로세스 종료 |
IGN | 시그널 무시 |
CORE | 시그널을 수신한 프로세스를 종료하면서 코어 덤프 파일 생성 |
STOP | 시그널을 수신한 프로세스 중지 |
CONT | 중지된 프로세스 재시작 |
kill -9를 쓰면 안되는 이유
3-1. kill -9로 signal을 보내면 개발자가 구현한 종료 함수가 호출되지 않고 즉시 프로세스가 종료되어 버리므로 데이터가 유실되거나 리소스가 제대로 안닫히는 큰 문제 발생 가능.
3-2. kill -TERM PID 나 kill -INT PID같이 종료를 의미하는 signal을 여러번 전송해 주는 것을 추천
signal LIST
Signal Name |
Number |
Description |
SIGHUP |
1 |
Hangup (POSIX) |
SIGINT |
2 |
Terminal interrupt (ANSI) |
SIGQUIT |
3 |
Terminal quit (POSIX) |
SIGILL |
4 |
Illegal instruction (ANSI) |
SIGTRAP |
5 |
Trace trap (POSIX) |
SIGIOT |
6 |
IOT Trap (4.2 BSD) |
SIGBUS |
7 |
BUS error (4.2 BSD) |
SIGFPE |
8 |
Floating point exception (ANSI) |
SIGKILL |
9 |
Kill(can't be caught or ignored) (POSIX) |
SIGUSR1 |
10 |
User defined signal 1 (POSIX) |
SIGSEGV |
11 |
Invalid memory segment access (ANSI) |
SIGUSR2 |
12 |
User defined signal 2 (POSIX) |
SIGPIPE |
13 |
Write on a pipe with no reader, Broken pipe (POSIX) |
SIGALRM |
14 |
Alarm clock (POSIX) |
SIGTERM |
15 |
Termination (ANSI) |
SIGSTKFLT |
16 |
Stack fault |
SIGCHLD |
17 |
Child process has stopped or exited, changed (POSIX) |
SIGCONT |
18 |
Continue executing, if stopped (POSIX) |
SIGSTOP |
19 |
Stop executing(can't be caught or ignored) (POSIX) |
SIGTSTP |
20 |
Terminal stop signal (POSIX) |
SIGTTIN |
21 |
Background process trying to read, from TTY (POSIX) |
SIGTTOU |
22 |
Background process trying to write, to TTY (POSIX) |
SIGURG |
23 |
Urgent condition on socket (4.2 BSD) |
SIGXCPU |
24 |
CPU limit exceeded (4.2 BSD) |
SIGXFSZ |
25 |
File size limit exceeded (4.2 BSD) |
SIGVTALRM |
26 |
Virtual alarm clock (4.2 BSD) |
SIGPROF |
27 |
Profiling alarm clock (4.2 BSD) |
SIGWINCH |
28 |
Window size change (4.3 BSD, Sun) |
SIGIO |
29 |
I/O now possible (4.2 BSD) |
SIGPWR |
30 |
Power failure restart (System V) |
참고 : https://www.lesstif.com/pages/viewpage.action?pageId=12943674
Unix, Linux 에서 kill 명령어로 안전하게 프로세스 종료 시키는 방법
시스템 작업하던 직원이 java 관련 프로세스 종료를 kill -9 로 하는 것을 보고 왜 이렇게 하는지 물어보니 "프로세스 종료시 이렇게 하는 게 아닌가요?" 라는 답변이 돌아왔습니다.
www.lesstif.com
참고 : https://shaeod.tistory.com/463
[리눅스] Signals 정리
※요약 Signal은 Unix/Linux에서 커널이나 프로세스가 다른 프로세스에게 비동기적인 사건을 알려주거나 시간을 동기화 시키기 위해 사용한다. signal을 받은 프로세스는 보통 3가지 작업을 할 수 있다. 프로세스..
shaeod.tistory.com
'찾아 본 자료' 카테고리의 다른 글
PIP 신뢰할 수 없는 SSL인증서 해결방법 (0) | 2019.11.04 |
---|---|
zeroMQ install (0) | 2019.11.01 |
배달의민족] 대규모 채용 기념 할인쿠폰 (0) | 2018.05.05 |
openssl 인증서 정보 확인 (0) | 2018.04.04 |
MySQL 컴파일 설치 (0) | 2018.03.19 |