kill 명령어 사용법

프로세스에 시그널을 보내 종료하거나 제어하는 명령어입니다.

프로세스·작업관리연결 실습 문제 4개Rocky Linux 8 기준 · 실행 결과는 실습 컨테이너에서 확인

기본 문법

kill [-시그널] PID...

kill은 지정한 PID의 프로세스에 시그널(signal)을 전달하는 명령어입니다. 이름과 달리 종료 전용 도구가 아니라 종료·중지·재개·설정 재읽기 등 여러 신호를 보내는 데 쓰입니다. 기본값은 15번 SIGTERM으로, 프로세스가 정리 작업을 마치고 스스로 끝나도록 요청하는 정상 종료 신호입니다.

실무에서는 응답이 없는 서비스나 장시간 점유 중인 프로세스를 정리할 때 씁니다. 순서는 보통 SIGTERM을 먼저 보내고, 일정 시간 기다린 뒤에도 남아 있으면 SIGKILL(9)로 강제 종료합니다. SIGKILL은 프로세스가 가로챌 수 없어 확실히 끝나지만, 임시 파일이나 데이터가 정리되지 않은 채 남을 수 있어 최후의 수단으로 둡니다.

Rocky Linux 8에서는 셸 내장 kill(bash 4.4)과 /usr/bin/kill(util-linux 2.32)이 함께 제공되며, 대화형 셸에서는 내장 kill이 먼저 쓰입니다. 작업 번호(%1) 지정은 내장 kill에서만 동작합니다.

리눅스마스터·LPIC 시험에서는 시그널 번호와 이름의 대응(15=TERM, 9=KILL, 1=HUP, 2=INT, 19=STOP, 18=CONT)을 묻는 문제가 자주 나옵니다. 실습에서도 PID 파일을 읽어 종료한 뒤 결과를 기록하는 형태로 ps, pgrep과 함께 다뤄집니다.

자주 쓰는 옵션

옵션의미
(옵션 없음)기본 SIGTERM(15) 전송, 정상 종료 요청kill 1234
-9SIGKILL 전송, 프로세스가 가로챌 수 없는 강제 종료kill -9 1234
-15SIGTERM 전송(기본값과 동일), 정상 종료 요청kill -15 1234
-l [시그널]시그널 목록 출력. 번호나 이름을 인자로 주면 서로 변환kill -l 9
-s 시그널보낼 시그널을 이름 또는 번호로 지정kill -s TERM 1234
-SIGNAL시그널 이름으로 지정(SIG 접두어 생략 가능)kill -TERM 1234
-1 (-HUP)SIGHUP 전송. 일부 데몬이 설정 파일 재읽기 신호로 사용(데몬마다 동작이 다름)kill -HUP 1234
-19 (-STOP) / -18 (-CONT)SIGSTOP으로 일시 중지, SIGCONT로 재개. 번호는 아키텍처에 따라 다를 수 있어 이름 사용을 권장kill -STOP 1234; kill -CONT 1234
-0시그널을 보내지 않고 프로세스 존재 여부와 시그널 전송 권한만 확인kill -0 1234
%작업번호셸의 작업(job) 번호로 지정. bash 내장 kill에서만 동작하며 /usr/bin/kill에서는 쓸 수 없음kill %1

실무 예시

시그널 목록과 번호 확인

$ kill -l 9; kill -l TERM
KILL
15

시그널 번호와 이름을 서로 변환합니다. 9는 KILL, TERM은 15임을 확인할 수 있습니다.

백그라운드 프로세스를 기본 시그널로 종료

준비: mkdir -p /tmp/demo; cd /tmp/demo

$ sleep 300 & PID=$!; kill $PID; sleep 1; ps -p $PID > /dev/null && echo "alive" || echo "stopped=$PID"
bash: line 2:    29 Terminated              sleep 300
stopped=29

옵션 없이 kill을 쓰면 SIGTERM이 전달되어 sleep 프로세스가 정상 종료됩니다. 대화형 셸에서는 작업 제어 알림('Terminated')이 별도 줄로 함께 출력될 수 있으며, PID 값은 실행할 때마다 달라집니다.

PID 파일을 읽어 SIGTERM으로 종료하고 결과 기록

준비: mkdir -p /tmp/demo/proc; sleep 300 & echo $! > /tmp/demo/proc/target.pid

$ kill -15 $(cat /tmp/demo/proc/target.pid); sleep 1; echo "stopped=$(cat /tmp/demo/proc/target.pid)" > /tmp/demo/proc/result.txt; cat /tmp/demo/proc/result.txt
bash: line 2:    39 Terminated              sleep 300
stopped=39

PID 파일에 기록된 PID를 읽어 SIGTERM으로 종료한 뒤, 종료한 PID를 결과 파일에 남깁니다. 셸의 작업 제어 알림이 함께 출력될 수 있습니다.

-0으로 생존 확인 후 SIGKILL 폴백

준비: mkdir -p /tmp/demo; sleep 300 & echo $! > /tmp/demo/t.pid

$ P=$(cat /tmp/demo/t.pid); kill -TERM $P; sleep 2; kill -0 $P 2>/dev/null && kill -9 $P; echo "killed=$P"
bash: line 2:    53 Terminated              sleep 300
killed=53

SIGTERM을 보낸 뒤 kill -0으로 생존 여부를 검사하고, 남아 있으면 SIGKILL로 강제 종료하는 패턴입니다. 이 예시의 sleep은 SIGTERM에서 바로 종료되므로 SIGKILL 단계는 실행되지 않습니다.

같은 이름 프로세스 중 가장 오래된 것만 종료

준비: mkdir -p /tmp/demo; for i in 1 2 3; do sleep 300 & sleep 0.3; done

$ P=$(pgrep -o -x -P $$ sleep); kill $P; sleep 1; echo $P; pgrep -x -P $$ sleep | wc -l
bash: line 2:    64 Terminated              sleep 300
64
2

pgrep -o는 조건에 맞는 프로세스 중 가장 먼저 시작된 하나의 PID만 출력합니다. -P $$로 현재 셸이 띄운 자식으로 범위를 좁혀야 컨테이너의 PID 1이나 다른 사용자의 sleep까지 잡히는 사고를 막을 수 있습니다. 남은 개수로 하나만 종료됐음을 확인합니다.

프로세스 중지와 재개

$ sleep 60 & P=$!; kill -STOP $P; ps -o pid,stat -p $P --no-headers; kill -CONT $P; ps -o pid,stat -p $P --no-headers; kill -9 $P
80 T
     80 S

SIGSTOP을 보내면 STAT가 T(중지)로, SIGCONT를 보내면 S(대기)로 바뀝니다. cmd 열은 환경에 따라 '/usr/bin/coreutils --coreutils-prog-shebang=sleep ...'처럼 실제 실행 경로가 표시될 수 있어 여기서는 pid와 stat만 출력합니다.

주의할 점

  • kill -9를 먼저 쓰면 프로세스가 정리 작업을 못 합니다. SIGTERM을 먼저 보내고 남을 때만 -9를 씁니다.
  • kill은 PID를 받습니다. 프로세스 이름을 그대로 넣으면 동작하지 않으므로 pgrep으로 PID를 구하거나 pkill을 씁니다.
  • SIGTERM 직후 바로 확인하면 아직 살아 있을 수 있습니다. 1~2초 기다린 뒤 kill -0으로 검사하세요.
  • pgrep -o는 시스템 전체에서 가장 오래된 프로세스를 고르므로, 컨테이너의 PID 1이나 다른 사용자의 동명 프로세스가 선택될 수 있습니다. -P, -u, -x 등으로 대상 범위를 반드시 좁히세요.
  • 다른 사용자의 프로세스는 root가 아니면 종료할 수 없어 'Operation not permitted'가 발생합니다.
  • PID 1(init/systemd 또는 컨테이너 주 프로세스)이나 커널 스레드에 시그널을 보내면 시스템이나 컨테이너가 중단될 수 있으니, 종료 전 ps로 대상 PID를 반드시 확인하세요.
  • SIGSTOP으로 중지한 프로세스는 스스로 깨어나지 못합니다. 반드시 SIGCONT로 재개해야 하며, 중지 상태로 방치하면 잠금이나 자원을 계속 점유할 수 있습니다.

이 명령어로 풀 수 있는 실습 문제

브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.

관련 명령어

마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.