←→ Underneath: Background Apps · 모든 Mac 가이드

Mac에서 LaunchAgent를 안전하게 비활성화하는 방법

가장 흔히 보이는 조언은 .plist를 LaunchAgents에서 삭제하라는 것입니다. 하지만 이는 최악의 방법입니다. 작업은 재시동할 때까지 계속 실행되고, 되돌릴 수도 없습니다. 안전하고 되돌릴 수 있는 방법을 소개합니다.

요약: 작업의 레이블을 찾은 다음, 다음을 실행합니다.

launchctl bootout gui/$(id -u)/com.example.label
launchctl disable gui/$(id -u)/com.example.label

첫 번째 명령어는 지금 바로 중지합니다. 두 번째 명령어는 재시동 후에도 꺼진 상태를 유지합니다. 되돌리려면 launchctl enable을 사용합니다.

시작하기 전에: /System/Library 안의 항목이나 com.apple.로 시작하는 레이블은 건드리지 마십시오. 이들은 macOS의 것입니다. VPN, 백업, 보안, 드라이버 도구는 그 도구를 제거하는 경우가 아니면 그대로 두십시오.

1단계: 작업 찾기

LaunchAgent와 LaunchDaemon은 변경해도 되는 다음 세 폴더에 있습니다.

Apple 자체 작업을 제외하고 지금 로드된 항목을 나열합니다.

launchctl list | grep -v com.apple

열은 프로세스 ID(실행 중이 아니면 -), 마지막 종료 상태, 레이블입니다. 필요한 것은 레이블입니다.

2단계: 무엇을 하는지 확인하기

plutil -p ~/Library/LaunchAgents/com.example.label.plist

프로그램 경로가 삭제한 앱을 가리키면 그 작업은 남은 찌꺼기이므로 제거해도 안전합니다. 업데이터라면, 비활성화할 경우 앱이 스스로 업데이트되지 않습니다.

3단계: 백업하기

mkdir -p ~/LaunchAgents-backup
cp ~/Library/LaunchAgents/com.example.label.plist ~/LaunchAgents-backup/

4단계: 지금 중지하기

에이전트의 경우(두 LaunchAgents 폴더 모두):

launchctl bootout gui/$(id -u)/com.example.label

/Library/LaunchDaemons에 있는 데몬의 경우:

sudo launchctl bootout system/com.example.label

이렇게 하면 작업이 언로드되고 프로세스가 종료됩니다. 하지만 이 상태는 재시동 후에는 유지되지 않습니다(작업에 RunAtLoad가 있는 경우).

5단계: 꺼진 상태 유지하기

다음 중 하나를 선택하십시오.

옵션 A: launchctl disable(권장)

launchctl disable gui/$(id -u)/com.example.label

데몬의 경우: sudo launchctl disable system/com.example.label

macOS가 레이블을 자체 비활성화 목록에 저장하므로, 앱이 plist를 다시 써도 작업은 꺼진 상태로 유지됩니다. 목록은 다음으로 확인합니다.

launchctl print-disabled gui/$(id -u)

옵션 B: plist 옮기기

mkdir -p ~/Library/LaunchAgents/Disabled
mv ~/Library/LaunchAgents/com.example.label.plist ~/Library/LaunchAgents/Disabled/

launchd는 LaunchAgents 폴더 바로 아래의 파일만 읽고 하위 폴더는 읽지 않으므로, 다음 로그인 때 작업이 로드되지 않습니다. 파일은 그대로 있으므로 필요할 때 쓸 수 있습니다. 앱이 plist를 다시 만들면 작업이 돌아옵니다. 옵션 A를 사용하면 이를 막을 수 있습니다.

옵션 C: 시스템 설정

많은 작업은 시스템 설정 › 일반 › 로그인 항목 및 확장 프로그램 › 백그라운드에서 허용에도 표시됩니다. 그곳에서 스위치를 꺼도 되지만, 스위치 하나가 같은 개발자의 여러 작업을 함께 제어할 수 있습니다. ‘백그라운드에서 허용’이란 무엇입니까?를 참고하십시오.

6단계: 제대로 되었는지 확인하기

launchctl list | grep com.example.label

아무것도 출력되지 않으면 로드되지 않은 것입니다. 확실히 하려면 재시동한 후 다시 실행해 보십시오.

되돌리기

옵션 A를 사용한 경우:

launchctl enable gui/$(id -u)/com.example.label
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.label.plist

옵션 B를 사용한 경우, 파일을 원래 위치로 옮기고 같은 bootstrap 줄을 실행합니다. 데몬의 경우 sudo를 붙이고, system을 gui/$(id -u) 대신 사용합니다.

인터넷에서 보게 될 오래된 명령어

launchctl unload -w file.plist와 launchctl load -w file.plist는 여전히 작동하지만, Apple은 이를 레거시라고 부릅니다. 현재 명령어는 bootout, bootstrap, disable, enable이며 오류 메시지도 더 명확합니다.

자주 묻는 질문

LaunchAgents의 파일을 삭제해도 안전합니까?

삭제보다 비활성화가 더 안전합니다. plist를 삭제해도 이미 로드된 작업은 멈추지 않으며, 나중에 필요할 때 파일을 되찾을 수 없습니다. launchctl bootout과 launchctl disable을 사용하거나, 파일을 백업 폴더로 옮기십시오.

launchctl unload -w를 사용해야 합니까?

여전히 작동하지만, Apple은 load와 unload를 레거시로 분류합니다. 최신 macOS에서는 작업을 중지할 때 launchctl bootout을, 꺼진 상태로 유지할 때 launchctl disable을 사용하십시오.

/System/Library에 있는 Apple LaunchAgent를 비활성화해도 됩니까?

하지 마십시오. 이들은 macOS의 일부이고, 시스템 무결성 보호가 파일을 지키며, 비활성화하면 iCloud, Spotlight, 업데이트 같은 기능이 망가질 수 있습니다.

launchctl disable은 어떻게 되돌립니까?

launchctl enable gui/$(id -u)/<label>을 실행한 다음 plist 경로를 지정해 launchctl bootstrap gui/$(id -u)를 실행하거나, 로그아웃했다가 다시 로그인하십시오.

앱이 LaunchAgent를 다시 만들었습니다. 어떻게 해야 합니까?

launchctl disable을 사용하십시오. 이 명령은 레이블 자체를 비활성화하므로, 앱이 plist를 다시 써도 꺼진 상태로 유지됩니다. 앱 자체의 ‘로그인 시 실행’ 설정도 끄십시오.