kill, killall, pkill 명령어로 프로세스 종료하기
이 단계에서는 kill, killall, pkill 명령어를 사용하여 프로세스를 종료하는 방법을 배웁니다. 이러한 명령어는 시스템 리소스를 관리하고 잘못된 응용 프로그램을 중지하는 데 필수적입니다.
Linux 의 프로세스는 신호에 반응합니다. 신호는 프로세스에 전달되는 소프트웨어 인터럽트입니다. 서로 다른 신호는 프로세스를 종료하거나 일시 중지하거나 구성 파일을 다시 로드하는 등 서로 다른 의미를 가집니다.
먼저 몇 가지 기본적인 프로세스 관리 신호를 이해해 보겠습니다.
- SIGTERM(15):
kill 명령어가 기본적으로 보내는 신호입니다. "예의 바른" 종료 요청입니다. 프로세스는 이 신호를 받아 정리한 후 종료할 수 있습니다.
- SIGKILL(9): 강제 종료를 위한 "차단 불가능한" 신호입니다. 프로세스는 이 신호를 무시하거나 처리할 수 없습니다. 마지막 수단으로 사용하십시오.
- SIGHUP(1): 종료하지 않고 구성 파일을 다시 로드하도록 프로세스에 알리는 데 자주 사용됩니다.
- SIGINT(2):
Ctrl+C를 누르면 전달되며, 일반적으로 포그라운드 프로세스를 중단하는 데 사용됩니다.
- SIGSTOP(19): 프로세스를 일시 중지합니다. 차단하거나 처리할 수 없습니다.
- SIGCONT(18): 중지된 프로세스를 다시 시작합니다.
모든 사용 가능한 신호와 그 번호는 kill -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
...출력 생략...
kill 사용하기
kill 명령어는 프로세스 ID(PID) 로 식별되는 프로세스에 지정된 신호를 보냅니다.
프로세스 종료 연습을 위해 몇 가지 백그라운드 프로세스를 생성해 보겠습니다. sleep 명령어를 다시 사용합니다.
sleep 300 &
sleep 301 &
sleep 302 &
이제 jobs를 사용하여 작업 번호와 PID 를 확인합니다.
jobs
[1] 1234
[2] 1235
[3] 1236
(참고: PID 는 다를 수 있습니다.)
첫 번째 sleep 프로세스의 PID 를 찾아봅시다. ps aux | grep sleep을 사용하여 sleep 300과 관련된 PID 를 찾을 수 있습니다.
ps aux | grep sleep
다음과 유사한 출력이 표시됩니다. sleep 300의 PID 를 확인합니다. 예를 들어 PID 가 1234인 경우:
labex 1234 0.0 0.0 2200 680 pts/0 S HH:MM 0:00 sleep 300
labex 1235 0.0 0.0 2200 680 pts/0 S HH:MM 0:00 sleep 301
labex 1236 0.0 0.0 2200 680 pts/0 S HH:MM 0:00 sleep 302
labex 1237 0.0 0.0 6000 1000 pts/0 S+ HH:MM 0:00 grep sleep
기본 SIGTERM 신호를 사용하여 sleep 300을 종료하려면 kill 명령어 뒤에 PID 를 사용합니다. 1234를 실제로 찾은 PID 로 바꿉니다.
kill 1234
[1]+ Terminated sleep 300와 같은 메시지가 표시될 수 있습니다. jobs 또는 ps aux | grep sleep을 사용하여 확인합니다.
jobs
[2]- Running sleep 301 &
[3]+ Running sleep 302 &
이제 SIGKILL을 사용하여 sleep 301을 강제 종료해 보겠습니다. PID(예: 1235) 를 찾아 kill -9 또는 kill -SIGKILL을 사용합니다.
kill -9 1235
[2]- Killed sleep 301와 같은 메시지가 표시될 것입니다. 다시 확인합니다.
jobs
[3]+ Running sleep 302 &
killall 사용하기
killall 명령어는 PID 가 아닌 이름으로 프로세스를 종료합니다. 지정된 명령어 이름과 일치하는 모든 프로세스에 신호를 보냅니다.
몇 가지 더 많은 sleep 프로세스를 생성합니다.
sleep 303 &
sleep 304 &
sleep 305 &
실행 중인지 확인합니다.
jobs
[3] Running sleep 302 &
[4] Running sleep 303 &
[5] Running sleep 304 &
[6] Running sleep 305 &
이제 killall을 사용하여 모든 sleep 프로세스를 종료합니다. 기본적으로 killall은 SIGTERM을 보냅니다.
killall sleep
각 종료된 sleep 프로세스에 대한 메시지가 표시됩니다. 모든 sleep 프로세스가 종료되었는지 확인합니다.
jobs
(no output)
pkill 사용하기
pkill 명령어는 killall과 유사하지만 명령어 이름, 사용자 ID, 그룹 ID 및 제어 터미널에 대한 패턴 일치를 포함한 더욱 고급 선택 기준을 제공합니다. 특정 프로세스 집합을 대상으로 하는 데 매우 유용합니다.
pkill을 위해 몇 가지 새로운 sleep 프로세스를 생성합니다.
sleep 306 &
sleep 307 &
sleep 308 &
실행 중인지 확인합니다.
jobs
[1] Running sleep 306 &
[2] Running sleep 307 &
[3] Running sleep 308 &
현재 사용자 (labex) 가 소유한 모든 sleep 프로세스를 종료하려면 pkill -u labex sleep을 사용합니다.
pkill -u labex sleep
이 명령어는 labex 사용자에게 속한 모든 sleep 프로세스를 종료합니다.
모든 sleep 프로세스가 종료되었는지 확인합니다.
jobs
(no output)
pkill을 패턴과 함께 사용할 수도 있습니다. 예를 들어 my_app_v1과 my_app_v2라는 프로세스가 있다면 pkill my_app으로 두 프로세스를 모두 종료할 수 있습니다.
이러한 명령어는 PID 로 단일 프로세스를 대상으로 하거나 이름 또는 다른 속성을 기반으로 여러 프로세스를 종료하는 등 유연한 방법으로 프로세스를 관리하고 종료하는 데 사용됩니다. kill -9 또는 SIGKILL을 사용할 때는 프로세스가 정리할 기회가 없으면 데이터 손실로 이어질 수 있으므로 항상 주의하십시오.