반응형
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 옵션 사용 가능) |
반응형
'시스템(Linux)' 카테고리의 다른 글
| /run/user/1000 알람에 대해 알아보겠습니다. (1) | 2026.03.11 |
|---|---|
| Fail2ban 완전 정복(브루트 포스 공격, Brute Force Attack) 자동 차단 도구 (0) | 2026.03.09 |
| ripgrep(rg) 에 대해 알아보겠습니다. (0) | 2026.03.01 |
| 리눅스 루트킷(Linux Rootkit) 에 대해 알아보겠습니다. (0) | 2025.12.19 |
| blkid 명령어에 대해 알아보겠습니다. (0) | 2025.12.18 |