리눅스 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
프로세스 이름을 알고 있다면 PID 대신 프로세스 이름으로 프로그램을 종료할 수도 있습니다. 이럴 때는 killall
명령어를 사용해야 합니다.
이 명령어는 시스템에 기본으로 설치되지 않았을 수 있습니다. 일부 리눅스 배포판에서는 killall
을 설치해야 할 수 있습니다.
killall
에는 추가적인 옵션이 많지만 kill
과 비슷한 옵션으로 구성되어 있습니다. 아래 예시는 vim
프로그램을 모두 종료하는 명령어입니다.
$ killall vim
마찬가지로 -s
, --signal
옵션을 사용하여 강제 종료 명령을 보낼 수 있습니다.
$ killall --signal SIGKILL vim
이외에도 POSIX 정규표현식을 사용하여 정규식에 매칭되는 이름을 모두 종료시킬 수 있습니다. 이 때는 -r
또는 --regexp
옵션을 사용합니다.
Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…
INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…
JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…
NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…
언제부턴가 윈도우 11을 처음 설치할 때 마이크로소프트(Microsoft) 계정 로그인을 강제로 요구하게 되었습니다. 물론 마이크로소프트 계정이…