리눅스에서는 시그널을 보내 프로세스를 관리할 수 있습니다. 이를 위한 주요 명령어는 kill이며, 이름과는 달리 프로세스를 종료하는 시그널뿐만 아니라 다양한 시그널을 보낼 수 있습니다.
kill sigterm 을 사용한 기본 종료
kill 명령어를 프로세스 ID(PID) 만 사용하여 실행하면 기본적으로 TERM 시그널을 보냅니다. 이는 프로그램에게 정상적으로 종료하도록 요청하는 표준적인 방법입니다.
kill 12445
kill sigterm 시그널 (또는 SIGTERM 또는 시그널 15) 은 프로세스가 깨끗하게 종료되도록 요청합니다. 이는 프로세스에게 진행 상황을 저장하고 리소스를 적절히 해제할 기회를 줍니다. 시그널 번호를 명시적으로 사용하여 kill -15 12445를 위의 명령어와 동일하게 만들 수도 있습니다. 이는 일반적인 kill -15 linux 검색에 대한 답변이 됩니다.
SIGKILL 을 사용한 강제 종료
때로는 프로세스가 응답하지 않아 SIGTERM 시그널에 반응하지 않을 수 있습니다. 이런 경우에는 KILL 시그널을 사용하여 강제로 중지시킬 수 있습니다.
kill -9 12445
SIGKILL 시그널 (시그널 9) 은 프로세스가 정리할 기회 없이 즉시 종료시킵니다. 이는 kill vs terminate 논쟁에서 핵심적인 차이점입니다. SIGKILL은 무조건적인 종료인 반면, SIGTERM은 정중한 요청입니다.
기타 일반적인 시그널 이해하기
SIGTERM과 SIGKILL이 가장 일반적이지만, 다른 시그널들도 프로세스 관리에 유용합니다.
- SIGHUP:
kill sighup시그널 (Hangup, 시그널 1) 은 전통적으로 제어 터미널이 닫힐 때 프로세스에 전송됩니다. 데몬 프로세스에게 설정 파일을 다시 로드하도록 지시하는 데 사용될 수 있습니다. - SIGINT: 인터럽트 시그널 (시그널 2) 은
Ctrl-C를 누를 때 전송됩니다. 프로세스에게 현재 작업을 중단하도록 요청합니다. - SIGSTOP: 이 시그널 (시그널 19) 은 프로세스를 종료하지 않고 일시 중지시킵니다. 프로세스는 나중에
SIGCONT시그널로 재개될 수 있습니다.
kill -0 로 프로세스 존재 확인하기
특별한 사용 사례는 linux kill -0입니다. 이 명령어는 실제로 시그널을 보내지 않고 지정된 PID 를 가진 프로세스가 존재하는지, 그리고 해당 프로세스에 시그널을 보낼 권한이 있는지 확인합니다.
kill -0 12445
명령어가 성공적으로 실행되면 (종료 코드 0), 프로세스가 존재하는 것입니다. 실패하면 프로세스가 없거나 권한이 없는 것입니다.