리눅스에서 Singal을 사용해서 프로세스를 컨트롤 하는 방법.
# show all signal list
kill -l
# kill process
kill -9 [PID]
signal 이란 linux 에서 process 를 control 할 수 있는 신호를 의미합니다.
signal 를 사용하면 특정 event 가 발생했을 때 관련된 process 들에게 어떠한 행동을 하도록 만든다던지..
혹은 강제로 해당 process 를 멈추게 한다던지 등의 process control 을 수행할 수 있습니다.
singal 에는 많은 종류가 있는데. 전체 signal 목록을 확인하기 위해선 다음과 같이 입력합니다.
kill -l
시그널 발생
어떤 이벤트가 발생하면(예: 사용자가 Ctrl+C를 눌러 SIGINT를 발생시킴), 시그널이 해당 프로세스에게 전송됩니다.
시그널 전송
시그널이 발생하면 커널은 해당 시그널을 받을 프로세스에게 전송.
시그널 수신
프로세스가 시그널을 받으면 현재 실행 중인 작업을 일시 중단, 시그널처리기(시그널핸들러)를 실행합니다
시그널 처리기 실행
프로세스는 특정 시그널에 대한 동작을 결정하기 위해 시그널 처리기를 실행합니다.
시그널 처리기는 사용자가 정의한 동작을 수행하거나, 기본 동작을 수행하도록 프로그래밍됩니다.
일부 시그널은 무시하거나, 특정 동작을 수행하도록 프로세스에게 지시할 수 있습니다.
가장 많이 사용되는 4가지 signal 소개
1-1) SIGHUP (1)
SIGHUP 은 HangUP 의 약자로 로그아웃과 같이 터미널에서 접속이 끊겼을 때 보내지는 시그널입니다.
데몬 관련 환결 설정 파일을 변경시키고 변화된 내용을 적용하기 위해 재시작 할 때 사용됩니다
1-2) SIGINT (2)
SIGINT 는 키보드로부터 입력받는 Interupt 시그널로 실행을 중지합니다.
일반적으로 CTRL + C 입력시 보내지는 시그널입니다.
1-3) SIGKILL (9)
SIGKILL 은 process 를 강제로 종료시키는 시그널 입니다.
SIGKILL 을 사용하면 모든 process 는 강제로 종료되게 됩니다.
1-4) SIGTERM (15)
SIGTERM 은 terminate 의 약자로 가능하다면 정상 종료 시키는 시그널이며, kill 명령어의 기본 시그널 입니다.
SIGTERM 명령을 입력받은 process 는 상황에 따라서 종료될 수도 아닐 수도 있습니다.
만약, SIGTERM 으로 종료되지 않은 process 는 SIGKILL 을 사용해 강제로 종료할 수 있습니다.