killall 명령어: 프로세스 이름으로 끝내기와 -9 시그널, psmisc 설치

공정위 광고 문구 Ver 3.1
공정위 광고 문구 Ver 3.2(모바일 전용)
테스트 환경RHEL 계열AlmaLinux 9.8psmisc 23.4root 계정Debian 12 · psmisc 23.6 일반 계정(killall 실행)
프로세스 · 작업 예약 명령어killall위치/usr/bin/killall2026-11-03 확인

killall 명령어는 프로세스 번호(PID) 대신 프로그램 이름으로 실행 중인 프로세스를 골라 신호를 보내는 리눅스 명령어이며, 신호를 적지 않으면 SIGTERM을 보냅니다(공식 매뉴얼 기준). 이름이 같은 프로세스를 한꺼번에 끝내는 명령이라 AlmaLinux 9 서버에서 sleep을 다른 이름으로 복사해 띄운 네 프로세스를 pgrep과 ps로 먼저 확인했고, 15자보다 긴 실행 파일은 프로세스 이름에 앞 15자만 남아 있었습니다.

killall은 Debian 12 서버의 일반 계정에서 시험용으로 띄운 xxsleep 프로세스에만 실행했습니다. 결과 상자는 AlmaLinux 9.8 서버의 root 계정에서 실행한 rpm, pgrep, ps, pidof, cat, kill 출력과 Debian 12 서버에서 실행한 killall 출력입니다. 프로세스 번호(PID)와 프로세스 이름, 실행 파일 경로, 계정 이름은 예시 값으로 바꿨습니다.

1️⃣ killall 명령어 설치

  • ↪️ psmisc 패키지와 버전 확인

killall은 psmisc 패키지에 들어 있습니다. AlmaLinux 9.8 서버에서 /usr/bin/killall이 속한 패키지를 rpm으로 확인하자 psmisc 23.4 버전이 나왔습니다.

rpm -qf --qf '%{NAME} %{VERSION}\n' /usr/bin/killall
psmisc 23.4

rpm -ql로 본 같은 패키지의 파일 목록에는 pstree와 fuser도 함께 들어 있었습니다.

명령을 찾지 못한다는 [command not found]가 나오면 psmisc 패키지를 설치합니다. RHEL 계열은 [dnf install psmisc], Debian 계열은 [apt install psmisc] 꼴입니다. Debian 12 서버에는 psmisc 23.6 버전이 이미 설치되어 있었고, killall은 /usr/bin/killall에 있었습니다.

AlmaLinux 9.8 서버에서 확인하자 이름이 비슷한 pkill은 procps-ng 패키지에 들어 있었고, kill은 셸 내장 명령이었습니다.

2️⃣ killall 명령어 사용법

  • ↪️ 프로세스 이름으로 대상 확인

기본 꼴은 [killall 프로세스 이름]입니다. 적은 이름으로 실행 중인 프로세스를 모두 찾아 신호를 보내고, 이름을 여러 개 적으면 이름마다 같은 일을 합니다(공식 매뉴얼 기준).

같은 이름의 프로세스가 한 번에 끝나므로, 그 이름으로 무엇이 실행 중인지 pgrep으로 먼저 확인합니다. 작업 폴더에 sleep을 xxsleep-a1, xxsleep-a2, xxsleep-longname-x1이라는 이름으로 복사하고 xxsleep-a1만 두 번 띄워 모두 네 개를 실행한 뒤, -l로 번호와 이름을 출력했습니다.

pgrep -l xxsleep
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2
2155 xxsleep-longnam

네 번째 줄은 실행 파일 이름이 xxsleep-longname-x1인데, 프로세스 이름은 xxsleep-longnam에서 끊겨 있었습니다.

-a를 붙이면 실행한 명령 줄 전체가 나옵니다. 이름이 같은 두 xxsleep-a1은 끝의 초 단위 인자 300과 310으로 구분했습니다.

pgrep -a xxsleep
2141 /root/work/xxsleep-a1 300
2142 /root/work/xxsleep-a1 310
2150 /root/work/xxsleep-a2 320
2155 /root/work/xxsleep-longname-x1 330

이름이 정확히 같은 프로세스만 찾을 때는 -x를 붙입니다. xxsleep-a1을 넣은 결과는 번호 두 개였습니다.

pgrep -x xxsleep-a1
2141
2142

이름 하나를 그대로 넣어 번호만 확인할 때는 pidof를 사용합니다. xxsleep-a1을 찾자 두 번호가 한 줄에 나왔습니다.

pidof xxsleep-a1
2142 2141

ps는 -C 뒤에 쉼표로 여러 이름을 적어 이름이 정확히 같은 프로세스만 출력합니다.

ps -o pid,comm -C xxsleep-a1,xxsleep-a2
    PID COMMAND
   2141 xxsleep-a1
   2142 xxsleep-a1
   2150 xxsleep-a2

Debian 12 서버에서 같은 이름으로 네 프로세스를 띄우고 [killall xxsleep-a1]을 실행하자, 아무것도 출력하지 않고 종료 코드 0으로 끝났습니다. pgrep으로 다시 찾자 두 xxsleep-a1은 사라지고 xxsleep-a2와 xxsleep-longname-x1만 남아 있었습니다. 이름 대신 슬래시(/)가 들어간 경로를 적으면 이름과 관계없이 그 파일을 실행 중인 프로세스를 고릅니다(공식 매뉴얼 기준).

없는 이름 xxsleep-zz를 적자 이름 뒤에 [no process found]가 붙은 줄이 나오고, 종료 코드 1로 끝났습니다. 종료 코드는 적은 이름마다 하나 이상 끝냈을 때만 0입니다(공식 매뉴얼 기준).

killall xxsleep-zz
xxsleep-zz: no process found

번호를 알고 있는 프로세스 하나만 끝낼 때는 리눅스 kill 명령어로 그 번호에만 신호를 보냅니다.

3️⃣ killall 명령어 옵션

  • ↪️ -e와 15자 이름, -i, -v, -u, -r

xxsleep-longname-x1로 띄운 프로세스의 이름을 /proc/번호/comm에서 읽자, 앞 15자인 xxsleep-longnam만 남아 있었습니다.

cat /proc/2155/comm
xxsleep-longnam

16자인 xxsleep-longname으로 pgrep을 실행했습니다.

pgrep -a xxsleep-longname

출력 없이 종료 코드 1로 끝났고, 15자인 xxsleep-longnam으로 다시 찾은 결과에는 그 프로세스가 나왔습니다.

pgrep -l xxsleep-longnam
2155 xxsleep-longnam

killall은 15자보다 긴 이름을 받았을 때 전체 이름을 읽지 못하는 프로세스가 있으면 앞 15자가 맞는 것을 모두 대상으로 삼고, -e를 붙이면 그런 항목을 건너뜁니다(공식 매뉴얼 기준). Debian 12 서버에서 -e와 -v를 붙여 앞 15자인 xxsleep-longnam을 적자, 이름이 15자에서 끊긴 다른 프로세스 셋을 건너뛰었다는 줄이 나오고 [no process found]로 끝났습니다.

killall -e -v xxsleep-longnam
killall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
xxsleep-longnam: no process found

전체 이름 xxsleep-longname-x1을 적자 같은 건너뜀 줄 뒤에 그 프로세스에 신호를 보낸 줄이 나왔습니다.

killall -e -v xxsleep-longname-x1
killall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
Killed xxsleep-longname-x1(2155) with signal 15

-v를 붙이자 신호를 보낸 프로세스마다 이름과 번호, 신호 번호가 든 줄이 나왔습니다.

killall -v xxsleep-a2
Killed xxsleep-a2(2150) with signal 15

-i는 프로세스마다 끝낼지 묻습니다. xxsleep-a1 둘을 다시 띄우고 답을 표준 입력으로 y와 n 차례로 넣자 두 물음이 한 줄에 이어 나왔고, 첫째 xxsleep-a1만 끝나고 둘째는 남았습니다.

printf 'y\nn\n' | killall -i xxsleep-a1
Kill xxsleep-a1(2171) ? (y/N) Kill xxsleep-a1(2172) ? (y/N)

-u는 그 계정이 소유한 프로세스만 고르며, 이름을 생략하면 그 계정의 프로세스 전체가 대상입니다. 계정 이름 뒤에 xxsleep-a1을 함께 적자 남아 있던 xxsleep-a1에만 신호를 보냈습니다.

killall -v -u user xxsleep-a1
Killed xxsleep-a1(2172) with signal 15

-o와 -y는 시작한 시각으로 고르고, 시간은 [-o 30m]처럼 숫자 뒤에 s, m, h, d, w, M, y 단위를 붙여 적습니다.

-r은 이름을 확장 정규식으로 읽습니다. ^xxsleep-a 패턴을 pgrep에 넣자 xxsleep-a로 시작하는 세 프로세스가 나왔습니다.

pgrep -l '^xxsleep-a'
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2

-w는 신호를 보낸 프로세스가 모두 사라질 때까지 1초마다 확인하며 기다립니다. 신호를 무시하거나 좀비 상태로 남은 프로세스라면 끝없이 기다릴 수 있습니다.

아래 첫째 표는 이 글에서 실제로 실행한 확인 명령과 killall 옵션이고, 실행하지 않은 killall 옵션은 둘째 표에 공식 매뉴얼 기준으로 모았습니다.

📌 프로세스 확인과 killall: 이 글에서 실행한 결과

명령하는 일이 글에서 본 결과
pgrep -l 이름이름이 들어간 프로세스의 번호와 이름xxsleep으로 네 줄이 나오고, 긴 이름은 앞 15자 xxsleep-longnam까지만 보임
pgrep -a 이름번호와 실행한 명령 줄 전체이름이 같은 두 xxsleep-a1을 끝의 인자 300과 310으로 구분
pgrep -x 이름이름이 정확히 같은 프로세스의 번호만xxsleep-a1로 2141과 2142 두 줄
pidof 이름그 이름으로 실행 중인 번호를 한 줄에xxsleep-a1로 2142 2141
ps -o pid,comm -C 이름이름이 정확히 같은 프로세스의 번호와 이름, 쉼표로 여러 이름xxsleep-a1 두 줄과 xxsleep-a2 한 줄
cat /proc/번호/comm프로세스 이름(앞 15자까지)2155는 xxsleep-longnam
killall 이름그 이름의 프로세스에 SIGTERMxxsleep-a1 두 개가 끝나고 종료 코드 0, 없는 이름 xxsleep-zz는 no process found와 종료 코드 1
killall -e 이름15자보다 긴 이름은 전체 이름이 맞을 때만xxsleep-longnam은 no process found, xxsleep-longname-x1은 끝남
killall -v 이름신호를 보낸 프로세스마다 결과 출력Killed xxsleep-a2(2150) with signal 15
killall -i 이름끝내기 전에 프로세스마다 확인y와 n을 넣자 첫째 xxsleep-a1만 끝남
killall -u 계정 이름그 계정이 소유한 프로세스만이름과 함께 적어 그 계정의 xxsleep-a1만 끝남
killall -9 이름SIGTERM 대신 SIGKILLKilled xxsleep-a2(2173) with signal 9

📎 그 밖의 옵션: 공식 매뉴얼 기준

옵션하는 일
-I, --ignore-case이름을 대소문자 구분 없이 비교
-g, --process-group프로세스 대신 그 프로세스 그룹에 신호(그룹마다 한 번)
-l, --list아는 신호 이름 목록
-n, --ns PID그 PID와 같은 PID 네임스페이스의 프로세스만, 기본은 모든 네임스페이스
-o, --older-than 시간그 시간보다 먼저 시작한 프로세스만(단위 s, m, h, d, w, M, y)
-q, --quiet끝낸 프로세스가 없어도 알리지 않음
-r, --regexp이름을 확장 정규식으로 읽음
-s, --signal 신호SIGTERM 대신 보낼 신호
-V, --version버전 정보 출력
-w, --wait신호를 보낸 프로세스가 모두 사라질 때까지 기다림
-y, --younger-than 시간그 시간보다 나중에 시작한 프로세스만
-Z, --context 패턴보안 컨텍스트가 확장 정규식 패턴과 맞는 프로세스만, 다른 인자보다 앞에 적음, 이름은 생략 가능

🔲 killall 명령어 시뮬레이터

아래 시뮬레이터는 xxsleep 네 프로세스에 예시 계정 user1의 xxsleep-a2를 더한 목록으로 시작합니다. 칩을 눌러 [killall -v]와 [-i], [-u]로 목록에서 사라지는 줄을 비교할 수 있으며, killall 출력 문구는 Debian 12 서버에서 실행한 출력에 맞춘 흉내입니다.

killall 명령어 시뮬레이터psmisc 23.4
[root@server work]#
브라우저 안에서만 동작합니다. 왼쪽 목록은 예시 값이며, killall은 Debian 12 서버에서 실행한 출력 문구를 따른 흉내로 목록에서만 지웁니다.

4️⃣ killall 시그널

  • ↪️ -s 옵션과 killall -9, 신호 번호

보낼 신호는 [-HUP]이나 [-SIGHUP]처럼 이름으로, [-1]처럼 번호로, 또는 -s 옵션 뒤에 적습니다(공식 매뉴얼 기준). [killall -9 프로세스 이름]은 9번 신호인 SIGKILL을 보냅니다. SIGKILL은 프로세스가 잡거나 무시할 수 없는 신호라(공식 매뉴얼 기준) 프로세스가 마무리 작업을 하지 못하고 끝납니다. 그래서 기본 신호인 SIGTERM으로 끝나지 않을 때 보냅니다.

Debian 12 서버에서 다시 띄운 xxsleep-a2에 -v와 함께 -9를 붙이자, 신호 번호 9가 찍힌 줄이 나왔습니다.

killall -9 -v xxsleep-a2
Killed xxsleep-a2(2173) with signal 9

신호 이름과 번호는 [kill -l]로 확인했습니다. killall에도 아는 신호 이름을 출력하는 -l 옵션이 있습니다.

kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX

번호 하나를 넣자 그 신호 이름만 나왔습니다. killall이 기본으로 보내는 15는 TERM, -9로 보내는 9는 KILL이었습니다.

kill -l 15
TERM
kill -l 9
KILL

목록에 없는 신호 이름을 적으면 [FOO: unknown signal; killall -l lists signals.] 꼴의 문구가 나옵니다(공식 매뉴얼·프로그램 문구 기준).

🔢 FAQ & 추천 콘텐츠

killall은 psmisc 패키지, pkill은 pgrep과 같은 procps-ng 패키지의 명령입니다. pkill은 pgrep처럼 이름 일부를 확장 정규식으로 찾고, killall은 -r을 붙였을 때만 이름을 정규식으로 읽습니다(공식 매뉴얼 기준).

psmisc 공식 매뉴얼은 리눅스가 아닌 시스템에서 [killall 이름]이 기대와 다르게 동작할 수 있고, 관리자 계정으로 실행할 때 특히 주의하라고 적고 있습니다. 다른 시스템에서는 그 시스템의 매뉴얼로 먼저 확인합니다.

한 번에 적을 수 있는 이름 수에는 한도가 있으며, unsigned long 정수의 크기에 8을 곱한 값입니다. 64비트 시스템은 보통 64개, 32비트 시스템은 32개입니다(공식 매뉴얼 기준).

ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Prove your humanity: 8   +   5   =