본문 바로가기
시스템(Linux)

Linux kill vs pkill 정리

by forward error correction Circle 2026. 3. 10.
반응형

Linux에서 kill과 pkill은 둘 다 프로세스에 시그널을 보내는 명령어이지만, 프로세스를 지정하는 방식이 다릅니다. kill 과 pkill 에 대해 정리를 해보았습니다.

Ⅰ. kill 명령어 란?

 PID(프로세스 ID) 를 지정해 해당 프로세스에 시그널(signal)을 보내는 명령어입니다(“죽인다”라기보다 “시그널을 전송한다”가 정확). 기본 시그널은 SIGTERM(15)로, 정상 종료를 요청합니다.

Ⅱ. kill 명령어 사용방법

  ⅰ. 기본 사용법

kill [시그널] [PID]


 ⅱ. 시그널 목록 확인

kill -l

 

 ⅲ. 자주 쓰는 시그널

SIGHUP (1): 재로드/리프레시 용도로 자주 사용(프로그램 구현에 따라 동작)
# kill -1 [PID]

SIGHUP (2): 작업 도중 취소
# 작업 도중 취소 (Ctrl+C)

SIGKILL (9): 강제 종료(정리 작업 없이 즉시 종료, 최후 수단)
# kill -9 [PID]

SIGTERM (15): 기본값, 정상 종료 요청(정리/flush 등 할 기회 제공)
# kill [PID] / # kill 15 [PID]

SIGCONT (18): 정지된 프로세스 재개
# kill -18 [PID]

SIGSTOP (19): 강제 일시정지
# kill -19 [PID]

 

 ⅳ. 표준 시그널 (1 ~ 31번)
주로 시스템이나 키보드 입력에 의해 발생하는 전통적인 시그널들입니다. 

번호  시그널 이름 설명 및 용도
1 SIGHUP  터미널 종료 시 발생 (데몬의 경우 설정 파일 재설정용으로도 사용)
2 SIGINT Ctrl + C 입력 시 발생. 프로세스 인터럽트(중단)
3 SIGQUIT Ctrl + \ 입력 시 발생. 코어 덤프를 남기고 종료
4 SIGILL 잘못된 CPU 명령어 실행 시 발생
5 SIGTRAP 디버깅 시 중단점(Breakpoint) 발생
6 SIGABRT 프로세스가 스스로 비정상 종료(Abort)할 때 발생
7 SIGBUS 잘못된 메모리 접근(Bus Error) 시 발생
8 SIGFPE 0으로 나누기 등 산술 연산 오류 시 발생
9 SIGKILL 강제 종료. 어떤 경우에도 무시하거나 처리할 수 없음
10 SIGUSR1 사용자 정의 시그널 1
11 SIGSEGV 잘못된 메모리 참조(Segmentation Fault) 시 발생
12 SIGUSR2 사용자 정의 시그널 2
13 SIGPIPE 읽는 이가 없는 파이프에 쓰기 시도 시 발생
14 SIGALRM 타이머(alarm) 시간이 다 되었을 때 발생
15 SIGTERM 정상 종료 (Default). 프로세스에게 정리를 요청함
16 SIGSTKFLT 스택 결함 시 발생 (수치 연산 프로세서용)
17 SIGCHLD 자식 프로세스가 종료되거나 멈췄을 때 부모에게 알림
18 SIGCONT 멈췄던 프로세스를 다시 재개(Continue)
19 SIGSTOP 프로세스를 즉시 멈춤(Pause). 무시 불가능
20 SIGTSTP Ctrl + Z 입력 시 발생. 프로세스 일시 정지
21 SIGTTIN 백그라운드 프로세스가 터미널 입력을 시도할 때 발생
22 SIGTTOU 백그라운드 프로세스가 터미널 출력을 시도할 때 발생
23 SIGURG 소켓에 긴급한 데이터가 도착했을 때 발생
24 SIGXCPU 할당된 CPU 시간 제한을 초과했을 때 발생
25 SIGXFSZ 생성 가능한 파일 크기 제한을 초과했을 때 발생
26 SIGVTALRM 가상 타이머 시간이 다 되었을 때 발생
27 SIGPROF 프로파일링 타이머 시간이 다 되었을 때 발생
28 SIGWINCH 터미널 창 크기가 변경되었을 때 발생
29 SIGIO I/O 작업이 가능해졌을 때 발생
30 SIGPWR 전원 공급 장치에 문제가 생겼을 때 발생
31 SIGSYS 잘못된 시스템 콜을 호출했을 때 발생
32~33 - 대부분의 시스템에서 정의되지 않거나 내부용으로 사용


ⅴ. 실시간 시그널 (34 ~ 64번)
SIGRTMIN(34)부터 SIGRTMAX(64)까지의 시그널입니다. 표준 시그널과 달리 큐(Queue)에 쌓여 순서대로 처리되며, 여러 번 보내도 유실되지 않는 특징이 있습니다. 
34번 (SIGRTMIN): 실시간 시그널 중 가장 낮은 번호
35 ~ 63번 (SIGRTMIN+n): 사용자 정의 실시간 애플리케이션 용도로 사용
64번 (SIGRTMAX): 실시간 시그널 중 가장 높은 번호

Ⅲ. kill 명령어 활용 방안

 ⅰ. 특정 PID 1개를 정확히 종료(가장 안전/정밀)

# 해당 프로세스의 PID 조회
ps aux | grep mysql

# 정상 종료가 안 되면 강제 종료로 단계 상승(권장 흐름: TERM → (대기/확인) → KILL)
kill 1234       
kill -9 1234

# 데몬에 재로드 성격의 시그널 전달(지원 여부는 프로세스에 따라 다름)
kill -HUP 1234

# Job ID 1번에게 정상종료 요청
kill %1

Ⅳ. pkill 명령어란?

 프로세스 이름 또는 패턴으로 대상을 찾아 시그널을 보내는 명령어입니다. PID를 미리 찾지 않아도 이름으로 빠르게 처리할 수 있습니다.

Ⅴ. pkill 명령어 사용 방법

 ⅰ. 기본 형식

pkill [옵션] <프로세스명 또는 패턴>


-f: “프로세스 이름(comm)”이 아니라 전체 커맨드라인(인수 포함) 기준으로 매칭(정교하지만 오매칭 위험도 증가)
-u : 특정 사용자 소유 프로세스만 대상으로 매칭


 ⅱ. pkill 활용 방안

# 이름으로 일괄 종료(TERM)
pkill tomcat

# 즉시 강제 종료(KILL)
pkill -9 firefox

# 인수까지 포함해서 정확히 타겟팅(전체 커맨드라인 매칭)
pkill -f "python app.py"

# 특정 사용자 프로세스만 종료
pkill -u username mysql


# 재로드/리프레시 성격의 시그널 전송
pkill -HUP sshd

Ⅵ. kill vs pkill 명령어 비교

구분 kill pkill
프로세스 지정 방식  PID(프로세스 ID)로 지정 프로세스 이름 또는 정규표현식으로 지정
사전 작업 필요 여부 ps, pgrep 등으로 PID를 먼저 조회 별도 조회 없이 바로 실행 가능
다중 프로세스 처리  여러 PID를 직접 나열 조건에 일치하는 모든 프로세스에 일괄 적용
영향도(제어 정확성) 특정 PID 하나만 정확하게 종료 가능 동일한 이름을 가진 모든 프로세스에 영향
잡(Job) 제어 가능 (kill %1 등) 불가능
정규표현식 지원 지원하지 않음 지원함 (-f 옵션 사용 가능)


  
  

 

 

반응형