←→ 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:
~/Library/LaunchAgents: agent của riêng bạn. Không cần mật khẩu./Library/LaunchAgents: agent cho mọi người dùng. Cần mật khẩu quản trị viên để thay đổi tệp./Library/LaunchDaemons: daemon hệ thống, chạy với quyền root. Cầnsudo.
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
ProgramArgumentshoặcProgram: tác vụ chạy cái gì. Đường dẫn có trỏ tới ứng dụng bạn biết không? Ứng dụng đó còn tồn tại không?RunAtLoad: khởi động mỗi lần đăng nhập.KeepAlive: khởi động lại khi dừng.StartInterval/StartCalendarInterval: chạy theo lịch.
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.