맥(Mac)에서 Sublime Text subl . 명령어 안먹은 이유와 해결 과정 정리

Sublime Text subl . 명령어 안먹은 이유 이미지

subl .명령어로 Sublime Text 에디터를 프로젝트 폴더를 통째로 여는 작업을 해봤는데요.. 이 명령이 전혀 동작하지 않고 에러 메시지도 없고, Sublime Text 창도 안 뜨는 경험을 했는데요..

하는 수 없이 그냥 터미널에 ^Z(컨트롤+Z)를 입력해서 원래대로 되돌아 오는 사태가 발생했어요. 재미있는 건, 이 상황에서 which subl을 찍어보면 경로는 아주 멀쩡하게 /usr/local/bin/subl로 잘 잡혀 있다는거예요.

심볼릭 링크도 제대로 걸려 있고, PATH도 문제없다. 그럼에도 불구하고 프로그램은 열리지 않는다. 이 글에서 바로 그 “눈에 안 보이는 두 가지 원인”을 실제로 겪은 케이스를 바탕으로 찬찬히 풀어보겠습니다.​

문제 요약: 증상은 단순하지만, 안쪽은 복합적인 상태였다

터미널에서 본 현상은 대략 이런 흐름입니다.​

  • subl . 실행 → 아무 반응 없음
  • Ctrl + Z를 눌러 빠져나오면
    • ^Z
    • zsh: suspended subl .
  • jobs를 찍어보면
    • [1] - suspended subl .
    • [2] + suspended subl .

표면적으로는 “백그라운드로 보내버린 것 같다” 정도지만, 실제로는 다음 두 가지가 한꺼번에 엮여 있는 것이었습니다!​

  1. 쉘 레벨에서 Ctrl + Z로 인해 subl 프로세스가 모두 suspend 상태로 쌓인 것
  2. macOS의 Gatekeeper/AppTranslocation 때문에 Sublime Text"(《世界人权宣言》) 애매한 위치에서 돌다가 crash_handler에 묶인 것

결과적으로는, 이미 어딘가에 “응답하지 않는 Sublime Text 관련 프로세스”가 떠 있는 상태에서 계속 subl .만 던져주고 있었던 셈이었죠.​

원인 1 – Ctrl + Z와 suspend 프로세스의 함정

쉘 입장에서 보면: “죽인 게 아니라 멈춰 둔 것뿐”

터미널에서 ^Z가 찍히는 순간, 프로세스는 죽는 게 아니라 일시 중지(suspend)만 됩니다. 쉘은 이걸 jobs 목록으로 관리합니다.​

  • Ctrl + C → 프로세스를 강제 종료
  • Ctrl + Z → 프로세스를 중지 상태로 백그라운드에 남김

예시 상황을 다시 보면

bevin@MacBook-Pro % subl .
^Z
zsh: suspended subl .

bevin@MacBook-Pro % jobs
[1] - suspended subl .
[2] + suspended subl .

지금 이 시점에서 subl은 “동작 중”인 것도 “완전히 종료된” 것도 아닙니다. 그냥 멈춰 있을 뿐인데, OS 입장에서는 이미 이 사용자의 세션 안에 Sublime Text와 연결된 프로세스가 존재하는거죠. 새로 뜨고 싶어도 이전 것과 꼬일 수 있는 구조입니다.​

첫 번째 정리 – jobs와 pkill로 숨은 프로세스 제거

이때 가장 먼저 할 일은, 숨은 프로세스를 전부 지우는 거예요. 실제로 아래와 같은 명령을 사용하면 됩니다.​

pkill -f subl
pkill -f "Sublime Text"
pkill -f crash_handler

그리고 다시 jobs를 확인해 보면, [1] + killed subl . 같은 메시지를 보면서 “아, 이게 계속 살아 있었구나”를 체감하게 됩니다. 이 과정을 거치면 최소한 Ctrl + Z로 인한 suspend는 정리됩니다.​

원인 2 – AppTranslocation과 crash_handler가 만든 보이지 않는 늪

ps aux | grep subl image

AppTranslocation이란 무엇인가?

프로세스를 정리하고 나서도, ps aux | grep subl을 찍어보면 눈에 띄는 경로가 하나 있습니다.​

文本/private/var/folders/.../AppTranslocation/02A1CC84-.../d/Sublime Text.app/Contents/MacOS/sublime_text
/private/var/folders/.../AppTranslocation/.../d/Sublime Text.app/Contents/MacOS/crash_handler

이 경로는 macOS Gatekeeper가 앱을 임시 격리(AppTranslocation)해 놓았다는 신호라고 하네요. 쉽게 말하면, “아직 신뢰한 적 없는 앱이라 안전한 임시 위치에서 돌려볼게” 하는 보호 메커니즘입니다.​

문제는, Sublime Text를 이런 상태로 쓴 채로 심볼릭 링크를 만들거나, 한 번 crash가 난 후 잔여 프로세스가 남으면, subl 명령어가 정상적인 /Applications 경로가 아닌, 이 애매한 AppTranslocation 쪽과 얽히기 시작한다는 점입니다.​

crash_handler가 계속 돌아가던 이유

ps aux를 보면 CPU를 꽤 잡아먹는 crash_handler 프로세스가 보이는 경우가 있는데요. 이는 Sublime Text가 이전에 비정상 종료되었고, 그 크래시 정보를 수집·전송하려고 남아 있는 프로세스입니다.​

여기까지 겹치면 상황은 다음과 같습니다.

  • AppTranslocation에 올라간 Sublime Text가 한 번 비정상 종료
  • crash_handler가 계속 남아 있고, 관련 프로세스가 애매하게 동작
  • 사용자는 터미널에서 subl .을 반복 실행
  • 반응이 없으니 Ctrl + Z로 빠져나오면서 suspend만 더 쌓임

결국, “겉으로는 아무 것도 안 되는 것 같은데, 안쪽에서는 이미 꼬일 대로 꼬인 상태”가 되는거죠.​

실제 해결 과정 – 한 번에 정리한 단계별 스크립트

여기서부터는 초보자도 그대로 따라 할 수 있도록, 실제로 문제를 해결했던 순서를 정리해 볼께요.

1단계 – 모든 Sublime 관련 프로세스 완전 종료

먼저 지금 떠 있는 것들을 강제로 모두 털어내야 합니다.​

bash# 1) suspend된 subl 정리
jobs
pkill -f subl

# 2) 메인 앱과 crash_handler까지 강제 종료
sudo pkill -9 -f "Sublime Text"
sudo pkill -9 -f crash_handler

이 후 jobsps aux | grep subl을 다시 확인해서, 더 이상 Sublime 관련 행이 나오지 않도록 만듭니다. 이 단계만으로도 ^Z로 인한 “즉시 suspend” 현상은 사라집니다.​

2단계 – AppTranslocation 상태에서 벗어나기

근본적인 안정성을 위해, Sublime Text를 “정상적인 /Applications 설치 상태”로 되돌리는 것이 좋아요.​

  • DMG에서 직접 실행한 적이 있다면, 반드시 /Applications로 드래그해서 옮긴 뒤 실행
  • 이미 설치가 꼬인 느낌이라면
    • /Applications/Sublime Text.app 삭제
    • ~/Library/Application Support/Sublime Text* 및 캐시 폴더 정리 후 재설치

이 과정을 거치면 AppTranslocation 경로가 아니라, 정상적인 /Applications/Sublime Text.app/... 아래에서 실행되게 됩니다.​

3단계 – subl 심볼릭 링크 재설정

이제 CLI에서 부를 진짜 대상만 깔끔하게 연결해 주면 됩니다.​

bashsudo ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/subl
which subl # /usr/local/bin/subl 이 나오면 OK

이 상태에서 다시 한 번

subl .

을 실행했을 때,

  • 프롬프트는 바로 돌아오고
  • Dock에 Sublime Text 아이콘이 활성화되며
  • 현재 폴더가 탭으로 떠 있다

면 이제 정상이다. 더 이상 ^Z, suspended subl . 같은 메시지는 보이지 않을겁니다.​

같은 문제를 피하기 위한 작은 습관들

이 문제를 한 번 겪고 나면, 몇 가지 “생활 습관”을 바꾸는 것만으로도 비슷한 상황을 크게 줄일 수 있어요.

Ctrl + Z 대신 명확한 종료 사용

  • 에디터나 프로세스를 끊고 싶을 때
    • 가능하면 Cmd + Q (앱 종료)
    • 터미널에서는 Ctrl + C로 명시적으로 종료
  • Ctrl + Z는 “잠깐 멈춰 둔다”는 의미라, 자주 쓰면 jobs가 금방 지저분해져요.

DMG 앱은 반드시 /Applications로 옮긴 뒤 사용

Gatekeeper/AppTranslocation은 사용자가 DMG에서 바로 실행했을 때 특히 자주 등장하는데요.

  • DMG를 열면 → Sublime Text.app을 /Applications로 드래그
  • 그 다음에 Spotlight나 Launchpad, Dock에서 실행

이 패턴만 지켜도 AppTranslocation으로 인한 애매한 경로 문제를 상당히 줄일 수 있어요.​

개발용 도구는 CLI 연동까지 한 번에 정리

Sublime Text처럼 터미널에서 자주 부르는 도구는, 설치 직후에 아래 세 가지를 루틴처럼 확인하는 것이 좋습니다.​

  • /Applications에 정상 설치되어 있는지
  • subl 심볼릭 링크가 원하는 위치(/usr/local/bin)에 있는지
  • which subl로 CLI 경로를 눈으로 한 번 확인했는지

마무리 – “에러가 없어도 문제는 존재한다”는 걸 보여준 사례

이번 경험이 재미있었던 이유는, 터미널에 딱히 에러 메시지가 찍히지 않았다는 점입니다. 그냥 subl .을 쳤을 뿐인데, 화면에는 고요한 프롬프트만 있는거죠. 그 안쪽에서는 suspend, crash_handler, AppTranslocation이라는 세 가지 키워드가 얽혀 있구요.​

앞으로 같은 문제를 겪는 macOS + Sublime Text 사용자에게 꽤 실질적인 가이드가 되지 않을까 해요. 특히 초보자 입장에서는 “심볼릭 링크만 맞으면 다 되는 거 아냐?”라는 직관을 넘어, 프로세스/게이트키퍼/쉘 동작까지 엮어서 보는 좋은 연습이 될 것 같습니다.

类似文章