[macOS] 좀비 프로세스 사냥하기: ps, kill, pgrep 활용법

Mac을 사용하다 보면 앱이 응답하지 않고 ‘무지개 휠’만 뱅글뱅글 도는 상황을 마주합니다. ‘강제 종료’로도 해결되지 않는 좀비 프로세스나, 눈에 보이지 않는 백그라운드 프로세스가 문제를 일으킬 때, 터미널은 가장 확실한 해결사가 됩니다.

이번 포스팅에서는 특정 프로세스를 찾아내고, 신호를 보내 제어하며, 강제로 종료하는 고급 프로세스 관리 명령어들을 소개합니다.


## 1단계: 프로세스 찾기 (pspgrep)

가장 먼저 문제를 일으키는 프로세스의 고유 번호, 즉 **PID(Process ID)**를 알아내야 합니다.

  • ps aux: 현재 시스템에서 실행 중인 모든 프로세스를 상세하게 보여주는 전통적인 명령어입니다.
    • ps aux | grep "Google Chrome" 처럼 grep과 조합하여 특정 앱의 프로세스를 찾을 수 있습니다.
  • pgrep (더 현대적인 방법): pgrep은 프로세스 이름으로 PID를 직접 찾아주는 더 간편하고 현대적인 명령어입니다. -il 옵션을 함께 사용하면 대소문자 구분 없이, 상세 정보와 함께 찾아줍니다.
# "Chrome" 이라는 이름이 포함된 모든 프로세스의 PID와 이름 찾기
pgrep -il "Chrome"

## 2단계: 프로세스 종료하기 (killpkill)

PID를 알아냈다면, 이제 kill 명령어로 해당 프로세스에 종료 신호를 보낼 수 있습니다.

kill: 정중한 요청 vs. 강력한 망치

kill 명령어는 단순히 프로세스를 죽이는 것이 아니라, **’신호(Signal)’**를 보내는 역할을 합니다.

  • kill [PID] (기본, 신호 15): 가장 기본적인 방식으로, -15 (SIGTERM) 신호를 보냅니다. 이는 “프로그램아, 이제 정리하고 안전하게 종료해줘”라는 정중한 종료 요청입니다. 프로그램은 데이터를 저장하는 등의 마무리 작업을 할 시간을 갖습니다.
  • kill -9 [PID] (최후의 수단): -9 (SIGKILL) 신호는 운영체제가 프로세스를 강제로 즉시 종료시키는 **’묻지마 종료’**입니다. 마무리 작업 없이 바로 제거되므로, 데이터 유실의 위험이 있습니다. 일반 kill로 종료되지 않는 완벽한 ‘좀비’ 상태의 프로세스에만 사용해야 합니다.

pkill: 이름으로 한번에 종료

pkillpgrepkill을 합친 것과 같습니다. 프로세스 이름으로 바로 종료 신호를 보낼 수 있어 매우 편리합니다.

# 모든 Google Chrome Helper (Renderer) 프로세스를 정중하게 종료 요청
pkill -15 "Google Chrome Helper"

# 응답 없는 Preview 앱을 강제 종료
pkill -9 Preview

## 실전 시나리오: 포트를 점유한 유령 서버 종료하기

개발자라면 “Address already in use” 에러를 자주 봅니다. 이전에 종료한 줄 알았던 개발 서버가 특정 포트를 계속 점유하고 있을 때 해결하는 방법입니다.

  • 포트를 점유한 프로세스의 PID 찾기:
lsof -i :3000
  • 해당 PID를 이용하여 프로세스 종료:
kill [위에서_찾은_PID]

## 결론

ps, pgrep, kill 명령어는 Mac의 보이지 않는 뒷단에서 일어나는 일들을 제어할 수 있는 강력한 권한을 부여합니다. 이 명령어들을 올바르게 이해하고 사용하면, 어떤 앱 프리징 상황에서도 당황하지 않고 문제를 해결할 수 있는 진짜 파워 유저가 될 수 있습니다.