본문 바로가기
OS & Software/Linux

리눅스 프로세스 강제 종료: 응답 없는 프로그램 죽이기. kill, pkill, killall 명령어 차이와 시그널(9 vs 15)의 의미

by 아이럽스토리지 2026. 1. 17.
반응형

윈도우를 쓰다가 프로그램이 멈추면 본능적으로 Ctrl + Alt + Del을 눌러 작업 관리자를 켭니다. 그리고 "작업 끝내기"를 누르죠.

리눅스 서버에서도 똑같은 일이 일어납니다.
잘 돌던 웹 서버가 멈추거나, 잘못 짠 코드가 메모리를 다 잡아먹고 '좀비'가 되어버리는 경우입니다.

이때 엔지니어는 검은 터미널 창에서 좀비가 된 프로세스를 찾아내어 강제로 종료시켜야 합니다.

하지만 무턱대고 죽이면 데이터가 날아갈 수 있습니다.

상황에 맞는 올바른 '명령어'와 '강도(시그널)'를 선택하는 법을 알아봅니다.

 


1. kill (정확한 PID 조준)

가장 기본이 되는 명령어입니다. 이름이 무시무시하게 kill이지만, 사실은 프로세스에게 "신호(Signal)를 보내는" 명령어입니다.

이 명령어를 쓰려면 먼저 타겟의 "PID, Process ID"를 알아야 합니다.

보통 ps -ef | grep [프로그램명] 명령어로 PID 숫자를 찾아낸 뒤 방아쇠를 당깁니다.

  • 특징: 정확하게 내가 원하는 프로세스 하나만 콕 집어서 죽일 수 있습니다.
  • 사용법: kill 1234 (PID가 1234인 녀석을 종료해라)

 


2. killall vs pkill (이름으로 쓸어버리기)

서버에서 httpd나 nginx 같은 웹 서버는 프로세스가 수십 개, 수백 개씩 떠 있습니다.

이걸 PID 하나하나 찾아서 kill로 지우려면 밤을 새워야 합니다. 이때 이름으로 한 번에 죽이는 도구를 씁니다.

killall (이름이 똑같으면 다 죽어) 프로세스 '이름이 완벽하게 일치'하는 모든 녀석을 한 번에 종료합니다.

  • 사용법: killall nginx (nginx라는 이름의 프로세스 전멸)

pkill (비슷하면 다 죽어) 이름의 '일부만 맞아도(패턴)' 죽입니다. 편리하지만 위험할 수도 있습니다.

  • 사용법: pkill java (이름에 java가 들어가는 모든 프로세스 종료) 

 


3. 부드럽게 보낼까? 확실하게 보낼까? (시그널 15 vs 9)

kill 명령어를 쓸 때 옵션으로 숫자를 붙이는 것을 본 적이 있을 겁니다.

kill -9 같은 것이죠. 이 숫자가 바로 "어떻게 죽일 것인가"를 결정하는 시그널(Signal)입니다.

수십 가지가 있지만, 딱 2개만 기억하면 됩니다.

 

기본값: -15 (SIGTERM, Termination)

  • 의미: "야, 이제 그만하고 퇴근해." (정중한 권유)
  • 동작: 프로세스에게 종료하라는 신호를 보내면, 프로세스는 하던 작업을 저장하고, 열려 있는 파일을 닫고, 메모리를 정리한 뒤 '스스로' 종료합니다.
  • 중요: 아무 옵션 없이 그냥 kill을 치면 기본적으로 이 15번 신호가 나갑니다. 가장 안전합니다.

강제 종료: -9 (SIGKILL, Kill)

  • 의미: "닥치고 당장 사라져!" (강제 집행)
  • 동작: 프로세스의 의사는 무시합니다. 리눅스 커널이 칼을 뽑아 그 즉시 프로세스의 목을 칩니다. 저장하지 못한 데이터는 날아가고, 파일이 깨질 수도 있습니다.
  • 언제 쓰나: 15번으로 정중하게 말했는데도 프로그램이 맛이 가서(응답 없음) 종료되지 않을 때, 최후의 수단으로 씁니다.

 


4. 올바른 종료 순서 (Best Practice)

초보자들은 급한 마음에 무조건 kill -9부터 날리곤 합니다.
하지만 DB 서버 같은 중요 장비에서 그랬다간 데이터가 깨져서 복구가 불가능해질 수 있습니다.

올바른 순서는 다음과 같습니다.

  1. 조회: ps -ef | grep nginx 로 PID를 확인한다.
  2. 권유: kill -15 [PID] 로 부드럽게 종료를 시도한다. (잠시 기다림)
  3. 확인: 다시 ps로 확인해 본다. 아직도 살아있는가?
  4. 강제: 끈질기게 안 죽는다면 그때 kill -9 [PID] 로 강제 종료한다.

 


5. 요약

  • kill: PID를 알아야 함. 저격수처럼 하나씩.
  • killall / pkill: 이름으로 여러 개를 한 방에.
  • -15 (SIGTERM): 정상 종료. 안전함. (1순위)
  • -9 (SIGKILL): 강제 종료. 데이터 손실 위험. (최후의 수단)

터미널 앞에서 멈춘 서버를 보며 식은땀 흘리지 마시고, 침착하게 -15부터 날려보는 여유를 가지시길 바랍니다.

 


📌 함께 읽어보면 좋은 글

서버용으로 가장 많이 쓰는 우분투(Ubuntu)와 록키 리눅스(Rocky Linux), 센트OS(CentOS) 중 우리 회사엔 뭐가 맞을까요? 배포판별 특징과 선택 가이드를 정리했습니다.

🔗 리눅스 배포판 추천: 우분투 vs 록키 vs 센트OS 선택 가이드 글 보러가기

반응형