리눅스 기초 시리즈의 새로운 장을 여는 16번째 시간입니다! 그동안 시스템의 신분증을 확인하고 파일의 위치를 찾는 법을 배웠다면, 이제는 살아 움직이는 시스템의 심박수를 체크하고 관리할 때가 되었습니다.
개발을 하다 보면 내가 짠 코드가 무한 루프에 빠지거나, Flutter 빌드가 멈춰버려 시스템 전체가 먹통이 되는 아찔한 순간을 마주하게 됩니다. 윈도우라면 '작업 관리자'를 켜서 강제 종료를 하겠지만, 터미널에서는 어떻게 해야 할까요? 오늘은 시스템의 폭주를 막는 두 가지 핵심 무기, **top**과 **kill**에 대한 저의 생생한 '진압' 기록을 공유합니다.
1. 나의 경험담: "멈춰버린 플러터 빌드와 뜨거워진 내 노트북"
최근 WSL2 환경에서 복잡한 애니메이션이 포함된 Flutter 앱을 빌드하던 중이었습니다. 평소보다 빌드 시간이 길어지더니 갑자기 노트북 팬이 굉음을 내며 돌기 시작했고, 터미널은 어떤 명령어도 입력받지 못하는 상태가 되었습니다.
당황해서 창을 닫으려 했지만 마우스 커서조차 버벅였죠. 예전 같았으면 노트북 전원을 꾹 눌러 강제 종료했겠지만, 이제 저는 리눅스 초보를 벗어난 상태였습니다. 저는 침착하게 새 터미널 창을 열고, 오늘 소개할 명령어들을 입력해 범인을 잡아내기 시작했습니다.
2. top: 시스템의 '실시간 건강 검진'
**top**은 리눅스의 '작업 관리자'입니다. 현재 어떤 프로그램(프로세스)이 CPU와 메모리를 얼마나 잡아먹고 있는지 실시간으로 보여줍니다.
실험 코드: 현재 상황 파악하기
# 1. 실시간 프로세스 상태 확인
top
# 2. (추천) 가독성이 훨씬 좋은 htop (설치 필요)
sudo apt install htop
htop
top 화면에서 눈여겨봐야 할 것:
- %CPU: 이 숫자가 100에 가깝다면 그 녀석이 범인입니다.
- %MEM: 메모리를 과하게 점유하고 있는지 확인하세요.
- PID: 프로세스 아이디. 나중에 이 녀석을 '처단'할 때 필요한 고유 번호입니다.
3. ps: "범인의 정확한 인상착의를 확인하라"
top이 실시간 감시 카메라라면, **ps**는 수사관이 들고 있는 '범인 몽타주'와 같습니다. 내가 찾고자 하는 특정 프로그램의 상태만 콕 집어서 확인할 수 있습니다.
실험 코드: 특정 프로세스 추적하기
# 'flutter'라는 단어가 포함된 모든 프로세스 정보를 보여줘!
ps -ef | grep flutter
# 출력 예시:
# user 1234 5678 99 12:34 ? 00:05:21 /path/to/flutter_build_process
(▲ Action: 여기서 나온 1234 같은 숫자가 바로 PID입니다. 이 번호를 확보했다면 이제 진압 준비는 끝났습니다.)
4. kill: 자비 없는 '디지털 단두대'
이제 범인을 잡았으니 멈춰 세울 차례입니다. **kill**은 이름만큼이나 강력한 명령어입니다. 실행 중인 프로세스에 중단 신호를 보냅니다.
진압 코드: 프로세스 종료하기
# 1. 신사적인 종료 요청 (데이터 저장 등을 기다려줌)
kill 1234
# 2. [필살기] 강제 즉시 종료 (말 안 들을 때 사용)
kill -9 1234
⚠️ 주의사항: -9 옵션은 리눅스 커널이 프로세스를 즉각 소멸시키게 합니다. 저장되지 않은 데이터가 날아갈 수 있으니, 일반적인 kill이 먹히지 않을 때만 최후의 수단으로 사용하세요.
5. After: 평화를 되찾은 시스템
kill -9 명령어 한 줄을 입력하자마자, 굉음을 내며 돌던 노트북 팬이 조용해졌습니다. top으로 다시 확인해 보니 99%를 차지하던 범인은 사라지고 시스템은 다시 평온을 되찾았죠. 윈도우를 재부팅할 필요 없이, 오직 문제의 근원만 도려낸 것입니다.
6. 실험 요약 및 인사이트
리눅스에서 프로세스를 관리한다는 것은 시스템의 **'생명력'**을 통제하는 것과 같습니다.
| 명령어 | 역할 | 비유 |
| top | 전체 시스템 자원 모니터링 | 종합 건강 검진 |
| ps | 특정 프로세스 상세 정보 조회 | 수사 보고서 확인 |
| kill | 특정 프로세스 종료 명령 | 문제 해결사 (진압) |
| kill -9 | 강제 즉시 종료 | 강력한 최후통첩 |
오늘의 인사이트: "시스템이 느려졌다고 불평하기 전에, 누가 그 자원을 독점하고 있는지 물어봐라. 리눅스에서는 아는 만큼 통제할 수 있다."
7. 마치며: 기초를 넘어 '운영'의 세계로
오늘 우리는 시스템의 위기 상황을 스스로 해결하는 법을 배웠습니다. 이제 여러분은 단순히 명령어를 입력하는 단계를 넘어, 시스템 전체의 흐름을 조율하는 **'운영자'**의 감각을 갖추기 시작했습니다.
오늘의 포스팅이 여러분의 '응답 없는 터미널'에 평화를 가져다주었나요? 여러분이 겪은 가장 황당한 '프로세스 폭주' 경험은 무엇인가요? 댓글로 공유해 주시면 큰 힘이 됩니다!
혹시 백그라운드에서 실행 중인 작업을 잠시 멈췄다가 다시 살려내는 bg와 fg 명령어에 대해서도 궁금하신가요? 다음 시간에는 '작업 제어(Job Control)'의 묘미를 알려드릴게요!
'IT' 카테고리의 다른 글
| [리눅스 기초 #18] 터미널을 꺼도 내 프로세스는 죽지 않아: nohup과 disown으로 생존 본능 깨우기 (0) | 2026.01.30 |
|---|---|
| [리눅스 기초 #17] 터미널은 하나인데 몸이 두 개였으면? bg, fg로 작업 제어 마스터하기 (0) | 2026.01.30 |
| [리눅스 기초 #15] "너는 누구냐?" : uname과 hostname으로 시스템 정체성 확인하기 (1) | 2026.01.29 |
| [리눅스 기초 #14] "도대체 넌 어디에 있니?" : which와 whereis로 실행 파일 추적하기 (0) | 2026.01.29 |
| [리눅스 기초 #13] "어제 쓴 그 명령어 뭐였지?" : history로 기억력을 해킹하는 법 (0) | 2026.01.29 |