명령어

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 – kill, killall

리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는 작업이 있거나 더 이상 응답이 없는 프로그램을 강제 종료할 때 주로 사용합니다.

kill 명령어와 함께 사용되는 인자값으로는 종료할 프로세스의 ID값(PID라고 합니다.)과 종료 명령을 위한 신호 코드가 필요합니다. 이를 시그널(Signal)이라고 합니다. 인자값에 프로세스 이름을 입력해도 kill이 수행되지 않으므로 이름 대신 PID를 입력해야 합니다. (단, 후술할 killall 명령어는 PID 대신 프로세스 이름을 입력합니다.)

PID를 찾는 방법은 현재 실행 중인 프로세스 목록을 확인하는 ps 명령어와 출력값에서 검색을 수행하는 grep 명령어를 조합하여 종료할 프로세스를 검색하는 방법이 있습니다.

$ ps -aef | grep sshd
user        1452    1325  0 17:22 ?        00:00:00 sshd: user@pts/0

위 예시에서 sshd 프로세스의 PID 번호는 두번째 값인 1452입니다.

사용 방법

프로세스의 PID값을 알아내었다면 다음과 같이 kill 명령어를 사용할 수 있습니다.

$ kill -9 1452

만약 현재 사용자가 아닌 다른 사용자 또는 root 사용자로 열린 프로세스나 시스템 프로세스를 강제 종료하려고 하면 실패할 것입니다. 다른 사용자의 프로세스를 강제로 종료하려면 관련 권한이 필요할 수 있습니다.

위 예시에서 -9()로 시그널 값을 지정하였습니다. 만약 인자값에 시그널을 별도로 지정하지 않으면 기본 시그널 값은 -15(SIGTERM)이 됩니다. SIGTERM은 실행을 중단하기 위해 프로그램에 요청하는 코드입니다. 하지만 프로그램의 응답이 없어 강제 종료를 원하는 경우에는 이 시그널 대신 -9(SIGKILL)을 사용해야 합니다.

프로그램에게 종료 상태를 올바르게 알리기 위해서나 시스템 관리에 혼란을 주지 않으려면 시그널을 생략하지 않는 것이 좋습니다. 만약 SIGKILL 시그널을 보내려면 아래 방법 중 하나로 시그널을 보낼 수 있습니다.

  • kill -9 [pid]
  • kill -SIGKILL [pid]
  • kill --signal 9 [pid]
  • kill --signal SIGKILL [pid]
  • kill -s 9 [pid]
  • kill -s SIGKILL [pid]

kill 명령어에 -l 옵션을 사용하면 전체 시그널(Signal) 목록을 확인할 수 있습니다.

$ 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 명령어

프로세스 이름을 알고 있다면 PID 대신 프로세스 이름으로 프로그램을 종료할 수도 있습니다. 이럴 때는 killall 명령어를 사용해야 합니다.

이 명령어는 시스템에 기본으로 설치되지 않았을 수 있습니다. 일부 리눅스 배포판에서는 killall을 설치해야 할 수 있습니다.

killall에는 추가적인 옵션이 많지만 kill과 비슷한 옵션으로 구성되어 있습니다. 아래 예시는 vim 프로그램을 모두 종료하는 명령어입니다.

$ killall vim

마찬가지로 -s, --signal 옵션을 사용하여 강제 종료 명령을 보낼 수 있습니다.

$ killall --signal SIGKILL vim

이외에도 POSIX 정규표현식을 사용하여 정규식에 매칭되는 이름을 모두 종료시킬 수 있습니다. 이 때는 -r 또는 --regexp 옵션을 사용합니다.

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

1개월 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

1개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

1개월 ago

윈도우 11 설치 시 Microsoft 계정 로그인 없이 로컬 계정 만들기

언제부턴가 윈도우 11을 처음 설치할 때 마이크로소프트(Microsoft) 계정 로그인을 강제로 요구하게 되었습니다. 물론 마이크로소프트 계정이…

6개월 ago

에어팟 프로 2 케이스 스피커 소리를 완전히 끄는 방법

애플 에어팟 프로 2 (AirPods Pro 2) 케이스에는 스피커가 내장되어 있습니다. 그런데 간혹 아무 것도…

9개월 ago

Docker Compose ‘found character that cannot start any token’ 해결

Docker Compose를 사용하여 서비스를 빌드하여 실행하기 위해 docker compose up 명령어를 사용합니다. $ docker compose…

9개월 ago