리눅스에서 프로세스 종료 방법 (2023년 가이드)
컴퓨터가 유난히 느리게 작동하거나, 간단한 작업조차 버벅거리는 경험은 누구나 있을 겁니다. 윈도우에서는 작업 관리자를 통해 과도한 메모리를 사용하는 프로세스를 확인하고 종료할 수 있지만, 리눅스에는 이러한 작업을 관리하기 위한 다양한 명령 및 GUI 도구가 존재합니다. 이 글에서는 리눅스에서 프로세스를 종료하는 여러 가지 방법, 특히 명령줄(CLI) 방식과 GUI 방식을 자세히 알아보겠습니다.
리눅스에서의 프로세스란 무엇인가?
리눅스에서 ‘프로세스’는 현재 실행 중인 프로그램의 각 인스턴스를 의미하며, 각 실행 파일은 프로그램이라고 부릅니다. 프로그램이 실행되면 프로세스가 생성되고, 각 프로세스에는 ‘프로세스 ID’라는 고유한 5자리 식별 번호가 부여됩니다. 프로세스가 실행을 마치거나 강제로 종료되면 해당 프로세스 ID는 다른 프로세스에 재할당됩니다.
명령줄을 이용한 프로세스 종료
터미널 사용이 처음에는 부담스러울 수 있지만, 명령과 다양한 옵션을 익히면 여러 프로세스를 훨씬 효율적으로 관리할 수 있습니다. GUI 도구보다 더 강력하고 섬세한 제어가 가능합니다.
종료 신호
리눅스에서 GUI 또는 CLI를 통해 프로세스를 종료하려고 시도하면 커널은 해당 프로세스에 종료 신호를 보냅니다. 프로세스는 수신된 신호에 따라 적절히 작동합니다. 각 신호는 프로그램이 빠르게 인식할 수 있도록 특정 번호로 지정되어 있습니다. 다양한 종료 신호가 있지만, 여기서는 자주 사용되는 필수 신호만 설명하겠습니다.
신호 | 숫자 값 | 설명 |
SIGHUP | 1 | ‘Signal Hangup’의 약자. 터미널 연결이 끊어질 때 전송됩니다. |
SIGINT | 2 | ‘Signal Interrupt’의 약자. 사용자가 프로세스 중단을 요청할 때 전송됩니다. |
SIGKILL | 9 | ‘Signal Kill’의 약자. 프로세스를 즉시 강제 종료해야 할 때 전송됩니다. |
SIGTERM | 15 | ‘Signal Termination’의 약자. 프로세스를 정상적으로 종료하고 리소스를 해제해야 할 때 전송됩니다. |
SIGSTOP | 19 (ARM, x86), 17 (Alpha), 23 (MIPS), 24 (PA-RISC) | ‘Signal Stop’의 약자. 프로세스를 일시 중지했다가 나중에 재개해야 할 때 전송됩니다. |
가장 일반적으로 사용되는 신호는 SIGKILL(9) 및 SIGTERM(15)입니다.
프로세스 ID 확인
프로세스를 종료하기 전에 프로세스 ID, 실행 시간 등 프로세스 관련 정보를 알아야 합니다. 이를 위해 ps
명령을 사용합니다.
ps
ps
명령은 프로세스 목록을 스크롤하며 찾아야 하므로 다소 번거로울 수 있습니다. 대신 ps
명령과 grep
명령을 파이프라인으로 연결하여 사용할 수 있습니다.
ps | grep <프로세스 이름>
또 다른 방법으로, 실행 중인 프로세스의 프로세스 ID만 표시하는 pidof
명령을 사용할 수 있습니다.
pidof <프로세스 이름>
kill
명령어를 이용한 프로세스 종료
종료하려는 프로세스의 ID를 확인한 후, 가장 일반적인 방법은 kill
명령을 사용하는 것입니다.
kill <신호> <프로세스 ID>
<신호>
매개변수는 선택 사항이며, kill
명령은 기본적으로 SIGTERM(15) 신호를 보냅니다. 위 표에 있는 숫자 값 또는 실제 신호 이름을 사용하여 다른 신호를 보낼 수 있습니다.
pkill
명령어를 이용한 프로세스 종료
프로세스 ID를 찾는 것이 불편하다면, pkill
명령을 사용할 수 있습니다. pkill
명령은 특정 패턴과 일치하는 프로세스를 찾아 종료합니다.
pkill <옵션> <패턴>
pkill
명령과 함께 사용되는 일반적인 옵션은 다음과 같습니다.
옵션 | 설명 |
-n | 프로세스 ID와 일치하는 가장 최근 프로세스만 선택 |
-u | 특정 사용자가 소유한 프로세스만 선택 |
-x | 패턴과 정확히 일치하는 프로세스 선택 |
예를 들어, 여러 사용자가 같은 시스템에서 같은 프로그램의 다른 인스턴스를 사용하고 있을 때, 특정 사용자 인스턴스만 종료해야 할 때 유용합니다. 다음은 ‘intel’ 사용자가 실행 중인 ‘gedit’ 인스턴스를 종료하는 예입니다.
pkill -u intel gedit
killall
명령어를 이용한 프로세스 종료
killall
명령은 kill
명령과 비슷하게 작동하지만, 사용자 계정에 상관없이 지정된 이름과 일치하는 모든 프로세스를 종료합니다. 기본적으로 SIGTERM 신호를 보냅니다. 흥미로운 점은 killall
명령은 자기 자신을 종료할 수 없지만 다른 killall
명령의 인스턴스는 종료할 수 있다는 것입니다.
killall <옵션> <프로세스 이름>
killall
명령과 함께 사용되는 일반적인 옵션은 다음과 같습니다.
옵션 | 설명 |
-r | process_name을 정규식 패턴으로 해석하고, 그 패턴과 일치하는 프로세스 종료 |
-u | 지정한 소유자가 소유한 특정 프로세스 종료 |
-o | 특정 시간보다 오래된(이전에 시작된) 지정된 프로세스 종료 |
-y | 특정 시간 이후에 시작된 (최근) 지정된 프로세스 종료 |
killall
명령은 동일한 프로세스가 여러 개 실행 중이거나, 특정 사용자가 실행한 모든 프로세스를 종료해야 할 때 유용합니다. 다음은 ‘sleep’ 프로세스를 모두 종료하는 예시입니다.
killall -v sleep
top
/htop
명령어를 이용한 프로세스 종료
어떤 프로세스가 가장 많은 리소스를 사용하는지 모를 때, top
또는 htop
명령을 사용하면 유용합니다. 두 명령 모두 실행 중인 프로세스 또는 좀비 프로세스를 확인하고, 바로 종료할 수 있게 해줍니다. top
명령을 사용하여 리소스를 모니터링하려면 터미널에서 다음 명령을 입력합니다.
top
top
명령은 다음과 같은 열로 구성됩니다.
- PID: 프로세스 ID
- USER: 프로세스 소유자
- PR: 프로세스 우선 순위
- NI: 사용자 우선 순위 값
- VIRT: 프로세스 가상 메모리 사용량
- RES: 프로세스 물리 메모리 사용량
- SHR: 다른 프로세스와 공유하는 메모리 양
- S: 프로세스 현재 상태 (D: 중단없는 수면, R: 실행 중, S: 수면, T: 중지, Z: 좀비)
- %CPU: CPU 사용률
- %MEM: 메모리 사용률
- TIME+: 프로세스 실행 시간
- COMMAND: 실행된 명령어
종료하려는 프로세스의 ID를 모른다면, 화살표 키를 사용하여 목록을 탐색하거나 ‘L’ 키를 누른 후 검색어를 입력하여 찾을 수 있습니다. 프로세스를 찾았다면 ‘k’ 키를 누른 후, 프로세스 ID를 입력하거나 현재 강조 표시된 프로세스를 그대로 두고 ‘Enter’를 눌러 종료할 수 있습니다. 종료 신호를 입력하고 ‘Enter’를 누르면 프로그램이 종료됩니다. 터미널로 돌아가려면 ‘q’를 누릅니다.
top
명령어는 모든 실행 중인 프로세스에 대한 세부 정보를 보여주지만, 초보자에게는 사용법이 다소 복잡할 수 있습니다. 반면, htop
명령은 더 사용자 친화적인 인터페이스를 제공하며, 별도의 보기로 모든 세부 정보를 표시합니다. htop
은 대부분의 배포판에 기본적으로 설치되어 있지 않으므로 다음 명령을 사용하여 설치해야 합니다.
sudo apt install -y htop
htop
을 사용하여 프로세스를 관리하려면 다음 명령어를 사용합니다.
htop
프로세스를 종료하려면 종료하려는 프로세스 이름으로 이동하고 ‘F9’를 누른 다음 Enter 키를 누릅니다. 프로세스를 검색하고 종료해야 하는 경우 ‘F3’을 누르고 이름을 입력한 다음 Enter 키를 누릅니다. 프로세스 이름이 강조 표시되면 F9를 누른 후 Enter를 눌러 종료합니다.
시스템 모니터를 이용한 프로세스 종료
명령줄 방식이 어렵다면, 대부분의 리눅스 배포판에서 사용할 수 있는 내장 시스템 모니터 도구를 사용할 수 있습니다. 응용 프로그램 메뉴에서 시스템 모니터 도구를 열고 다음 단계를 따르십시오.
1. 시스템 모니터 도구가 열리면 상단에 프로세스, 리소스 및 파일 시스템이라는 세 개의 탭이 표시됩니다. 프로세스를 관리하려면 “프로세스” 탭으로 이동하세요. 여기에서 현재 실행 중인 모든 프로세스를 볼 수 있습니다. 프로세스 이름을 검색하려면 ‘CTRL+F’를 누르십시오. 종료하려는 프로세스 이름을 클릭하고 “프로세스 종료”를 클릭하십시오.
2. 프로세스를 종료할지 여부를 묻는 메시지가 표시됩니다. 계속해서 큰 빨간색 “프로세스 종료” 버튼을 클릭하여 리눅스에서 프로세스를 종료합니다.
자주 묻는 질문
리눅스에서 모든 프로세스를 어떻게 중지합니까?
특정 사용자의 모든 프로세스 (로그인 쉘, 초기화 및 커널 관련 프로세스 제외)를 중지하려면 다음 명령을 사용합니다.
pkill -u <사용자 이름>
killall -u <사용자 이름>
초기화 시스템을 포함하여 모든 사용자의 모든 프로세스를 종료해야 하는 경우 키보드에서 ‘ALT + Prt Sc + o’ 키를 누릅니다.
프로세스를 종료해도 괜찮습니까?
필수적이지 않은 백그라운드 프로세스 또는 과도한 시스템 메모리를 사용하는 사용자 프로세스를 종료하면 다른 프로세스가 사용할 수 있는 리소스를 확보할 수 있습니다. 그러나 필수적인 운영 체제 프로세스를 종료하지 않도록 주의해야 합니다.
리눅스 백그라운드 프로세스란 무엇입니까?
리눅스에서 백그라운드 프로세스는 쉘 인스턴스나 사용자 개입 없이 실행될 수 있는 프로세스입니다. top
, htop
, ps
등의 명령을 사용하여 볼 수 있습니다.
좀비 프로세스란?
사용자가 종료했지만, 여전히 메모리를 차지하고 있는 프로세스를 좀비 프로세스라고 합니다.
리눅스에서 CTRL + Z는 무엇을 합니까?
리눅스에서 CTRL + Z는 프로세스를 일시 중지하고, 백그라운드로 보내는 SIGTSTP 신호를 보냅니다. 프로세스가 백그라운드에서 일시 중단된 상태라면, 다시 포그라운드로 가져오기 전까지는 종료할 수 없습니다.
리눅스에서 프로세스를 쉽게 종료하기
메모리를 과도하게 사용하는 프로세스를 종료하는 것은 모든 리눅스 사용자가 배워야 할 중요한 기술입니다. 이 글에서는 killall
및 pkill
과 같은 명령어를 포함한 명령줄 방식과, GUI 환경에서 프로세스를 종료하는 다양한 방법을 알아보았습니다. top
과 htop
과 같은 도구를 사용하여 시스템 프로세스를 관리하는 방법도 자세히 설명했습니다. 프로세스 종료에 문제가 있다면 아래 댓글로 알려주세요.