←→ Underneath: Background Apps · Tất cả hướng dẫn Mac

Cách tắt launch agent trên máy Mac an toàn

Xóa tệp .plist khỏi LaunchAgents là lời khuyên bạn gặp nhiều nhất. Đó cũng là cách tệ nhất: tác vụ vẫn tiếp tục chạy cho đến khi bạn khởi động lại, và bạn không thể hoàn tác. Dưới đây là cách an toàn, có thể hoàn tác.

Trả lời ngắn: tìm label của tác vụ, rồi chạy

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

Lệnh đầu tiên dừng tác vụ ngay bây giờ. Lệnh thứ hai giữ nó tắt sau các lần khởi động lại. launchctl enable sẽ hoàn tác.

Trước khi bắt đầu: đừng đụng vào bất cứ thứ gì trong /System/Library hoặc bất kỳ label nào bắt đầu bằng com.apple.. Chúng thuộc về macOS. Để yên các công cụ VPN, sao lưu, bảo mật và driver, trừ khi bạn đang gỡ bỏ công cụ đó.

Bước 1: Tìm tác vụ

Launch agent và daemon nằm trong ba thư mục bạn có thể thay đổi:

Liệt kê những gì đang được nạp, không gồm tác vụ của chính Apple:

launchctl list | grep -v com.apple

Các cột là ID tiến trình (- nếu không chạy), trạng thái thoát lần cuối và label. Bạn cần label.

Bước 2: Kiểm tra tác vụ làm gì

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

Nếu đường dẫn chương trình trỏ tới ứng dụng bạn đã xóa, tác vụ đó là phần còn sót lại và có thể gỡ bỏ an toàn. Nếu đó là trình cập nhật, tắt nó nghĩa là ứng dụng sẽ không tự cập nhật.

Bước 3: Sao lưu

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

Bước 4: Dừng ngay

Với agent (trong một trong hai thư mục LaunchAgents):

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

Với daemon trong /Library/LaunchDaemons:

sudo launchctl bootout system/com.example.label

Lệnh này gỡ nạp tác vụ và kết thúc tiến trình của nó. Nó không còn hiệu lực sau khi khởi động lại nếu tác vụ có RunAtLoad.

Bước 5: Giữ cho nó tắt

Chọn một cách.

Cách A: launchctl disable (khuyên dùng)

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

Với daemon: sudo launchctl disable system/com.example.label.

macOS lưu label vào danh sách tác vụ bị tắt của riêng nó, nên tác vụ vẫn tắt dù ứng dụng ghi lại tệp plist. Kiểm tra danh sách bằng:

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

Cách B: chuyển tệp plist đi chỗ khác

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

launchd chỉ đọc các tệp nằm trực tiếp trong thư mục LaunchAgents, không đọc thư mục con, nên tác vụ sẽ không được nạp ở lần đăng nhập sau. Tệp vẫn còn đó nếu bạn cần. Nếu ứng dụng tạo lại tệp plist, tác vụ sẽ quay lại; Cách A tránh được điều này.

Cách C: Cài đặt hệ thống

Nhiều tác vụ cũng xuất hiện trong Cài đặt hệ thống › Cài đặt chung › Mục đăng nhập & tiện ích mở rộng › Cho phép trong nền. Tắt công tắc ở đó cũng được, nhưng một công tắc có thể áp dụng cho nhiều tác vụ của cùng nhà phát triển. Xem “Cho phép trong nền” nghĩa là gì.

Bước 6: Kiểm tra kết quả

launchctl list | grep com.example.label

Không có kết quả nghĩa là tác vụ chưa được nạp. Hãy khởi động lại, rồi chạy lại lệnh để chắc chắn.

Hoàn tác

Nếu bạn đã dùng Cách A:

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

Nếu bạn đã dùng Cách B, chuyển tệp về chỗ cũ và chạy cùng dòng bootstrap đó. Với daemon, dùng sudo và system thay cho gui/$(id -u).

Các lệnh cũ bạn sẽ thấy trên mạng

launchctl unload -w file.plist và launchctl load -w file.plist vẫn hoạt động, nhưng Apple gọi chúng là lệnh cũ (legacy). bootout, bootstrap, disable và enable là các lệnh hiện hành và báo lỗi rõ ràng hơn.

Câu hỏi thường gặp

Xóa tệp trong LaunchAgents có an toàn không?

Tắt an toàn hơn xóa. Xóa tệp plist không dừng một tác vụ đã được nạp, và bạn mất tệp nếu cần lại. Hãy dùng launchctl bootout và launchctl disable, hoặc chuyển tệp vào một thư mục sao lưu.

Tôi có nên dùng launchctl unload -w không?

Lệnh này vẫn hoạt động, nhưng Apple coi load và unload là lệnh cũ (legacy). Trên macOS hiện tại, hãy dùng launchctl bootout để dừng tác vụ và launchctl disable để giữ nó tắt.

Tôi có thể tắt launch agent của Apple trong /System/Library không?

Đừng làm vậy. Chúng là một phần của macOS, System Integrity Protection bảo vệ các tệp này, và tắt chúng có thể làm hỏng các tính năng như iCloud, Spotlight hoặc cập nhật.

Làm sao hoàn tác launchctl disable?

Chạy launchctl enable gui/$(id -u)/<label>, sau đó launchctl bootstrap gui/$(id -u) kèm đường dẫn tệp plist, hoặc đăng xuất rồi đăng nhập lại.

Ứng dụng đã đặt lại launch agent của nó. Giờ làm sao?

Dùng launchctl disable. Lệnh này tắt theo label, nên tác vụ vẫn tắt dù ứng dụng ghi lại tệp plist. Đồng thời tắt cài đặt “Khởi chạy khi đăng nhập” riêng của ứng dụng.