kill 개요
`kill` 명령어는 특정 프로세스 ID(PID)를 가진 프로세스에게 시그널을 보냅니다. 가장 일반적인 시그널은 프로세스를 종료하라는 시그널이지만, 시그널의 종류에 따라 프로세스는 다르게 반응할 수 있습니다. 예를 들어, 프로세스를 일시 중지하거나 설정 파일을 다시 로드하도록 요청할 수도 있습니다.
프로세스 ID (PID)의 중요성
`kill` 명령어는 기본적으로 PID를 인자로 받습니다. 따라서 어떤 프로세스를 제어하고 싶은지 정확한 PID를 아는 것이 중요합니다. `ps` 명령어나 `top` 명령어를 사용하여 프로세스의 PID를 확인할 수 있습니다.
kill의 주요 역할
- 프로세스 종료: 더 이상 필요 없거나 오작동하는 프로세스를 강제로 또는 정상적으로 종료합니다.
- 프로세스 재시작/재로드: 특정 시그널을 보내어 프로세스가 설정 파일을 다시 읽거나 재시작하도록 유도합니다.
- 시스템 자원 관리: 불필요하게 많은 자원을 소모하는 프로세스를 종료하여 시스템 안정성을 확보합니다.
가장 흔히 사용되는 시그널
다양한 시그널이 있지만, 다음 두 가지가 가장 일반적으로 사용됩니다:
주요 시그널
- **SIGTERM (15, 기본값)**: 프로세스에게 '종료하라'는 부드러운 요청을 보냅니다. 프로세스는 이 시그널을 받으면 정리 작업을 수행하고 종료할 수 있습니다. 대부분의 경우 이 시그널을 먼저 시도합니다.
- **SIGKILL (9)**: 프로세스를 즉시 강제 종료합니다. 프로세스는 이 시그널을 무시하거나 가로챌 수 없으며, 정리 작업을 수행할 기회 없이 강제로 종료됩니다. 최후의 수단으로 사용해야 합니다.
주요 kill 명령어 옵션
`kill` 명령어는 시그널 번호 또는 시그널 이름을 사용하여 프로세스를 제어합니다. 특정 프로세스에 시그널을 보낼 때는 해당 프로세스의 PID를 정확히 지정해야 합니다.
1. 기본 사용법
2. 유용한 시그널
3. 모든 시그널 목록 확인
생성된 명령어:
명령어를 조합해 보세요.
설명:
`kill` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
killall 명령어 (이름으로 프로세스 종료)
`killall` 명령어는 `kill`과 달리 PID 대신 프로세스의 이름을 사용하여 해당 이름과 일치하는 모든 프로세스에 시그널을 보냅니다. 이는 특정 애플리케이션의 모든 인스턴스를 종료할 때 매우 편리합니다.
이름으로 프로세스 정상 종료
killall nginx
`nginx`라는 이름의 모든 프로세스에 SIGTERM 시그널을 보내 정상적인 종료를 요청합니다.
이름으로 프로세스 강제 종료
killall -9 firefox
`firefox`라는 이름의 모든 프로세스에 SIGKILL 시그널을 보내 즉시 강제 종료합니다.
특정 사용자 프로세스만 종료
killall -u $(whoami) chrome
현재 사용자의 `chrome` 프로세스만 종료합니다. 다른 사용자의 `chrome` 프로세스에는 영향을 주지 않습니다.
pkill 명령어 (패턴으로 프로세스 종료)
`pkill` 명령어는 `killall`과 유사하게 이름으로 프로세스를 종료하지만, 정규 표현식 패턴을 사용하여 프로세스를 찾는다는 점에서 더 유연합니다. 이는 부분적인 이름으로 프로세스를 찾거나, 여러 관련 프로세스를 한 번에 종료할 때 유용합니다.
패턴으로 프로세스 정상 종료
pkill http
이름에 'http'가 포함된 모든 프로세스에 SIGTERM 시그널을 보내 종료합니다. (예: `httpd`, `apache2` 등)
패턴으로 프로세스 강제 종료
pkill -9 mysql
이름에 'mysql'이 포함된 모든 프로세스에 SIGKILL 시그널을 보내 강제 종료합니다.
특정 사용자에게 속한 프로세스 종료
pkill -u www-data php-fpm
`www-data` 사용자에게 속한 모든 'php-fpm' 프로세스를 종료합니다.
사용 예시
`kill`, `killall`, `pkill` 명령어의 다양한 활용 예시들을 통해 시스템의 프로세스를 효과적으로 관리하는 방법을 익혀보세요.
특정 프로세스 ID (PID) 종료
kill 12345
PID가 `12345`인 프로세스에 SIGTERM 시그널을 보내 정상적인 종료를 시도합니다.
프로세스 강제 종료 (PID 사용)
kill -9 54321
PID가 `54321`인 프로세스가 응답하지 않을 때, `SIGKILL` 시그널로 강제 종료합니다.
Nginx 프로세스 재로드 (SIGHUP 사용)
sudo kill -1 $(cat /run/nginx.pid)
Nginx의 마스터 프로세스(PID)를 찾아 `SIGHUP` 시그널을 보내 설정 파일을 다시 읽도록 합니다. (Nginx 프로세스 PID는 `ps aux | grep nginx` 등으로 확인 가능)
이름으로 모든 Chrome 브라우저 종료
killall chrome
실행 중인 모든 Chrome 브라우저 프로세스를 정상적으로 종료합니다. (창이 닫히고 저장되지 않은 내용은 손실될 수 있음)
사용자 'johndoe'의 모든 프로세스 종료
sudo killall -9 -u johndoe
`johndoe`라는 사용자가 실행 중인 모든 프로세스를 강제로 종료합니다. (관리자 권한 필요)
CPU를 많이 사용하는 프로세스 종료 (예시)
# 1. top 또는 htop으로 PID 확인 (예: 12345)
# 2. 해당 PID 종료
kill 12345
`top`이나 `htop`으로 CPU를 많이 쓰는 프로세스의 PID를 확인한 후 종료하는 일반적인 시나리오입니다.