kill은 프로세스 종료와 시그널 전송에 사용되는 명령어임.

0. kill 이란?
kill은 리눅스/유닉스에서 process에게 시그널(signal) 을 보내는 명령어.
문제는 가장 흔한 사용 사례가 process를 종료시키는 용도라서 process killer라고 생각해도 무방할 지경이지만...
실제로는 다양한 시그널을 process에게 전송할 수 있음.
1. 기본 사용법
kill [시그널] PID
PID: 대상 프로세스의 ID- 시그널: 종료 방식 지정 (생략 시 기본은
SIGTERM, 즉 15번 시그널)
예시:
kill 1234 # 기본 시그널(SIGTERM)로 PDF1234 프로세스 종료 요청
kill -9 1234 # 강제 종료(SIGKILL)
kill -SIGINT 1234 # SIGINT 시그널을 이름으로 지정
2. 주요 시그널 정리
| 번호 | 이름 | 설명 |
| 1 | SIGHUP | 터미널 종료 시 발생 |
| 2 | SIGINT | 인터럽트 요청 (Ctrl+C) |
| 9 | SIGKILL | 강제 종료, 무시 불가 |
| 15 | SIGTERM | 정상 종료 요청 (기본값) |
| 18 | SIGCONT | 일시 중단된 프로세스 재개 |
| 19 | SIGSTOP | 일시 정지 (Ctrl+Z와 유사) |
쉽게 생각하면,
SIGTERM은 종료 요청SIGKILL은 강제종료
좀더 자세한 SIGNAL에 대한 내용은 다음을 참고:
2023.10.22 - [Linux] - [Linux] SIGNAL 에 대한 요약 정리.
[Linux] SIGNAL 에 대한 요약 정리.
SIGNAL이란??OS (LINUX 및 UNIX계열)에서의 SIGNAL은UNIX 또는 UNIX 계열 또는 POSIX 호환 OS에서제한된 형태의 Inter-Process Communication (IPC)와비동기 event처리를 위해 사용되는독립적인 비동기적 이벤트 처리 메
ds31x.tistory.com
3. 프로세스 찾기
ps aux | grep <프로그램명>
pgrep <프로그램명>
4. 자식 프로세스를 포함한 종료
kill은 기본적으로 부모 프로세스만 종료시킴: 고아 프로세스 발생시킬 수 있음.
프로세스의 자식 프로세스를 함께 종료하려면 아래 두 가지 방법 중 하나를 사용할 것:
4-1. 방법 1: 자식 프로세스를 수동으로 찾아서 종료
PARENT_PID=1234
CHILD_PIDS=$(pgrep -P $PARENT_PID)
kill $CHILD_PIDS # 자식 먼저 종료
kill $PARENT_PID # 부모 종료
4-2. 방법 2: 프로세스 그룹 전체에 시그널 보내기
# 마이너스(-) 기호를 붙이면 PGID (Process Group ID)를 의미함
kill -TERM -1234 # 1234번 PID가 속한 그룹 전체에 SIGTERM 전송
kill -9 -1234 # 강제 종료
이 방법은 Shell 에서 set -m (job control 활성화)인 경우에만 안정적으로 동작.
- job control이란 Shell이 백그라운드 작업, 포그라운드 작업, 일시 중지된 작업을 추적하고 제어하는 기능을 가리킴
- iteractive shell에선 대부분
set -m상태임. - shell script에선 기본적으로 job control이 비활성화 (
set +m)이기 때문에, 명시적으로 활성화시켜야하는 경우도 존재:set -m
#!/bin/bash
set -m # job control 활성화
./some_background_process &
PGID=$(ps -o pgid= -p $!) # 방금 실행된 백그라운드 프로세스의 그룹 ID
kill -TERM -$PGID # 프로세스 그룹 전체에 시그널 전송
Examples
# 정상 종료
kill 5678
# 강제 종료
kill -9 5678
# 이름으로 지정한 시그널
kill -SIGTERM 5678
kill -SIGKILL 5678
# 자식 프로세스까지 함께 종료
CHILD_PIDS=$(pgrep -P 5678)
kill $CHILD_PIDS
kill 5678
# 또는 프로세스 그룹 전체 종료
kill -TERM -5678
관련된 명령어
| 명령어 | 설명 |
pkill |
이름으로 프로세스 종료 (예: pkill python), 부분일치 지원 |
killall |
전체 이름 정확히 일치하는 프로세스 종료 |
pkill예제
pkill python # 이름에 'python'이 포함된 프로세스 모두 종료
pkill -f runserver # 명령줄 전체에 'runserver' 포함된 프로세스 종료
pkill -9 -u ubuntu python # ubuntu 사용자의 python 프로세스를 SIGKILL
killall예제
killall python # 정확히 'python' 이름의 프로세스만 종료
killall -u ubuntu python # ubuntu 사용자의 python 프로세스만 종료
killall -9 runserver # 정확히 'runserver'라는 이름의 프로세스 종료
요약
| 상황 | 추천 명령 |
| 일반 종료 | kill PID |
| 강제 종료 | kill -9 PID |
| 이름으로 종료 | pkill <이름> |
| 자식 포함 종료 | pgrep -P PID → 이후 자식과 부모 kill |
| 그룹 전체 종료 | kill -TERM -PID |
같이보면 좋은 자료들
2023.10.22 - [Linux] - [Linux] SIGNAL 에 대한 요약 정리.
[Linux] SIGNAL 에 대한 요약 정리.
SIGNAL이란??OS (LINUX 및 UNIX계열)에서의 SIGNAL은UNIX 또는 UNIX 계열 또는 POSIX 호환 OS에서제한된 형태의 Inter-Process Communication (IPC)와비동기 event처리를 위해 사용되는독립적인 비동기적 이벤트 처리 메
ds31x.tistory.com
2023.10.22 - [Linux] - [Linux] 현재 shell 또는 session의 관련 process들 확인하기 : jobs
[Linux] 현재 shell 또는 session의 관련 process들 확인하기 : jobs
ssh등으로 접속한 이후, 수행시킨 process들을 background로 수행시키거나 할 경우 해당 terminal session (해당 terminal의 shell을 통해 수행된) 관련 processes를 확인할 필요한 경우가 있다. 이 경우, 쉽게 확인
ds31x.tistory.com
2023.08.23 - [Linux] - [Linux] 특정 process의 memory 점유율 확인하기 : ps + awk + grep
[Linux] 특정 process의 memory 점유율 확인하기 : ps + awk + grep
process를 확인하는 명령어 ps에서특정 process의 이름에 해당하는 row 들만을 grep으로 빼낸 다음,6번째 있는 resident set size (rss)를 awk로 뽑아내어 다 더한 후 해당 결과를 출력. 다음은 현재 동작 중인 p
ds31x.tistory.com
'shell' 카테고리의 다른 글
| PowerShell의 초기화-profile (0) | 2025.12.31 |
|---|---|
| iconv, clip.exe, pbcopy, xclip, Set-Clipboard (0) | 2025.12.29 |
| Shell 함수 기본: bash, zsh에서 함수 사용하기 (3) | 2025.07.25 |
| Shell Script Conditionals(조건문)-test, [], [[]],(()) (1) | 2025.07.25 |
| [Bash] File과 directory 관련 command (0) | 2024.05.20 |