CodeGym /행동 /Docker SELF /프로세스 종료: 명령어 `kill`, `killall`, `pkill`

프로세스 종료: 명령어 `kill`, `killall`, `pkill`

Docker SELF
레벨 2 , 레슨 5
사용 가능

1. 프로세스 종료

오늘은 한 단계 더 나아가서 프로세스를 효율적으로 종료할 수 있는 명령어를 익혀볼 거야. 이제 멈춰버린 프로그램에 대한 인내는 끝날 준비를 해야 해!

Linux에서 실행 중인 모든 애플리케이션이나 명령은 프로세스야. 그런데 만약 프로그램이 멈추거나 CPU 자원을 100% 사용하거나 제대로 작동하지 않으면 어떻게 해야 할까? 관리자(또는 개발자)의 역할은 개입해서 "반항적인" 프로세스를 종료하는 거야. Linux에서는 이 작업을 위해 다양한 도구가 있어: kill, killall, pkill. 무시무시한 이름들 때문에 겁먹지 마. 우리는 여기서 뭐든 부수자는 게 아니라, 오히려 질서를 세우는 우아한 방법을 배우려는 거니까.


2. kill 명령어

기본

kill 명령어는 프로세스를 식별자 (PID)로 종료해. PID는 시스템이 각 프로세스에 부여하는 고유 번호야. 예를 들어, PID 1234를 가진 프로세스를 종료하려면 다음 명령어를 사용하면 돼:

kill 1234

Linux는 본질적으로 꽤 민주적인 시스템이야, 그래서 kill 명령어는 프로세스에게 "죽어라!"라고 명령하는 게 아니라 종료 요청을 보내는 거야. 이 요청을 "signal"이라고 불러. 기본적으로 killSIGTERM (15) 신호를 보낸다구.

신호(signal)란?

Linux는 프로세스와 소통하기 위해 신호를 사용해. 이건 마치 다른 의도로 우편엽서를 보내는 것 같아:

  • SIGTERM (15): "부탁이야, 종료해 줘". 이건 프로세스에게 실행을 종료하라는 정중한 요청이야.
  • SIGKILL (9): "자, 이제 끝났어, 넌 해고야!" 프로세스를 강제로 종료하는 거야.
  • SIGHUP (1): "이봐, 설정 다시 로드해". 몇몇 프로세스를 중지하지 않고 다시 시작할 때 사용돼.

프로세스를 강제로 종료하는 예제:

kill -9 1234

만약 SIGTERM으로도 프로세스가 종료를 거부하면, 더 강력한 신호 — SIGKILL을 보낼 수 있어.

프로세스 PID를 확인하는 방법?

kill 명령어를 사용하려면 프로세스의 PID를 알아야 해. 여기서 이미 알고 있는 명령어 ps, top 또는 htop가 도움이 돼. 예를 들어, ps aux 명령어의 출력은 모든 실행 중인 프로세스를 보여줄 거야:

ps aux | grep firefox

이 요청은 Firefox 프로세스를 찾고 PID를 출력해 줄 거야.

프로세스 종료 완료, 이제 한숨 돌려도 좋아. 하지만 "응답 없는" 프로세스가 여러 개 있으면 어떻게 할까? 여기서 killallpkill 명령어가 등장해.


3. killall 명령어

여러 개를 한 번에 종료하기 편리함

killall 명령어는 특정 이름을 가진 모든 프로세스를 종료할 수 있어. PID를 수동으로 찾을 필요 없이, 모든 게 훨씬 간단해져. 예를 들어, Firefox의 모든 실행 인스턴스를 닫고 싶다면:

killall firefox

kill 명령어처럼 killall도 프로세스에 신호를 보낼 수 있어. 특정 신호를 명시할 수도 있어:

killall -9 firefox

유용한 팁

killall 같은 명령어를 사용할 땐 조심해야 해. 너무 일반적인 프로세스를 명시하게 되면, 예를 들어 killall python 같은 경우, 모든 실행 중인 Python 애플리케이션을 한꺼번에 종료하게 될 수 있어. 이게 서버 작업이나 중요한 스크립트를 포함할 수도 있어.

어떤 신호를 지원하나?

kill, killall, pkill 명령어에 대해 사용 가능한 신호 목록은 다음 명령어로 확인할 수 있어:

kill -l

4. pkill 명령

이름(또는 일부)으로 프로세스 찾기

pkill 명령은 killall과 비슷하게 작동하지만 더 유연해. 특정 패턴에 맞는 프로세스를 종료할 수 있어. 예를 들어:

pkill fire

이 명령은 이름에 "fire"라는 단어가 포함된 모든 프로세스를 종료해. 프로세스 이름이 길거나 일부만 알고 있는 경우에 편리하지.

사용자 프로세스 종료

특정 사용자에게 속한 프로세스를 종료할 수도 있어. 예를 들어:

pkill -u username

이 명령은 username 사용자에게 속한 모든 프로세스를 종료해.

kill, killall, pkill 비교

명령어 특징
kill PID로 프로세스를 종료해. 특정 작업에 적합해.
killall 지정된 이름의 모든 프로세스를 종료해. 대량 프로세스 종료에 편리해.
pkill 이름이나 패턴으로 프로세스를 종료해. 사용자 이름 같은 추가 매개변수를 지원해.

5. 실습: 프로세스 종료

지금까지 배운 내용을 실제로 해볼게요. 먼저 몇 가지 오래 지속되는 프로세스를 실행해봅시다:

sleep 300 &
sleep 400 &
sleep 500 &

이 명령어들은 서로 다른 대기 시간을 가진 백그라운드 프로세스 3개를 생성합니다. 이제 kill, killall, 그리고 pkill 명령어를 사용해보세요.

  1. ps 명령어를 사용하여 실행 중인 모든 sleep 프로세스를 확인하기:
ps aux | grep sleep

여기서 각 프로세스의 PID를 볼 수 있습니다.

  1. 예를 들어 PID가 1234인 프로세스를 종료하세요:
kill 1234
  1. 모든 sleep 프로세스를 한 번에 종료하세요:
killall sleep
  1. 몇 가지 sleep 프로세스를 더 실행한 다음 pkill을 사용해서 종료하세요:
pkill sl

6. 일반적인 실수와 중요한 포인트

권한이 없는 프로세스를 종료하려고 하면(예를 들어 다른 사용자의 프로세스) 명령어가 에러를 반환해. 이럴 땐 superuser 권한(sudo)이 필요해. 예를 들어:

sudo kill 1234

또 다른 혼동의 원인은 너무 공격적인 신호 -9를 사용하는 거야. 이건 전원을 뽑는 거랑 비슷해: 시스템이 리소스를 해제하거나 데이터를 저장할 시간이 없어. SIGKILL은 정말 급한 상황에서만 써야 해.

killallpkill을 사용할 때 조심해야 해, 특히 서버를 관리할 때는 더욱. 프로세스를 "무작위로" 종료하면 중요한 데이터를 잃을 수 있어.


프로세스 종료 명령어를 알아야 하는 이유

이 명령어들은 멈춘 애플리케이션을 종료하는 것부터 서버 프로세스를 관리하는 것까지 다양하게 사용할 수 있어. 면접에서도 killpkill의 지식은 특히 시스템 관리나 백엔드 작업에서 중요한 역량으로 평가될 수 있어.

이 지식을 활용해 제어되지 않는 프로세스를 자동 종료시키거나 사용 중인 포트를 해제하는 스크립트를 만들어봐. 예를 들어, 포트 8080을 사용하는 서버를 시작하기 전에 다음 명령을 사용할 수 있어:

pkill -f "port 8080"

이 명령어들의 유연함과 강력함은 모든 Linux 전문가들에게 필수적인 도구야.

1
과제
Docker SELF, 레벨 2, 레슨 5
잠금
PID로 프로세스 종료하기
PID로 프로세스 종료하기
1
과제
Docker SELF, 레벨 2, 레슨 5
잠금
모든 동일한 이름의 프로세스 종료
모든 동일한 이름의 프로세스 종료
1
과제
Docker SELF, 레벨 2, 레슨 5
잠금
프로세스 종료 (패턴을 사용하여)
프로세스 종료 (패턴을 사용하여)
1
과제
Docker SELF, 레벨 2, 레슨 5
잠금
특정 사용자의 프로세스 종료
특정 사용자의 프로세스 종료
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION