launchd 是 macOS 中的系統守護進程,它可用於啟動和管理系統中的各種服務、程序和進程。launchd 是一個非常重要的組件,它被設計成一個常駐進程,可在系統啟動時啟動。
一、launchd 的概述
launchd 是一個管理進程的系統進程,它負責監控並運行用戶和系統級別的守護進程和應用程序。launchd 在責罰某個任務時會提供這個任務的服務描述文件,稱為plist文件,這個文件會告訴 launchd 如何運行這個任務。
在 macOS 中,所有的守護進程、系統服務、終端程序,以及其他用戶和管理員運行的程序,都必須通過 launchd 來啟動和管理。因此,了解 launchd 的工作原理和使用方法對於 macOS 系統管理人員和開發人員來說至關重要。
二、launchd 的工作原理
launchd 的工作原理十分簡單。在系統啟動時,launchd 會讀取系統中 /System/Library/LaunchDaemons 和 /Library/LaunchDaemons 目錄下的 plist 文件,運行其中的服務。同時,還會讀取系統中 /System/Library/LaunchAgents 和 /Library/LaunchAgents 目錄下的 plist 文件,啟動其中的程序。
在這些 plist 文件中,我們可以定義一系列的操作系統和應用程序的行為,比如啟動參數以及環境變數,這些內容會被 launchd 調用。
launchd 整合了 Unix cron 和 init 的特性。它會在指定的時間與某些事件發生時啟動程序,並且將其作為守護進程運行。launchd 還可用於秒級別的任務調度。
三、使用 launchd
為使用 launchd 需要編寫 plist 文件。這些文件包含程序、腳本或守護進程的相關信息,以及 launchd 如何啟動程序。
1.編寫一個 plist 文件
下面是一個簡單的 plist 文件示例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>my_daemon</string> <key>Program</key> <string>/usr/local/bin/my_daemon</string> <key>RunAtLoad</key> <true/> </dict> </plist>
在這個 plist 文件中,我們指定了一個名稱為 my_daemon 的標籤。該標籤的 Program 鍵指定了將要啟動的程序的路徑。該標籤中的 RunAtLoad 鍵表示該程序在系統啟動時運行。
2.將 plist 文件放在適當的位置
需要將這個 plist 文件放在 /Library/LaunchDaemons 或者 ~/Library/LaunchAgents 中。
/Library/LaunchDaemons 目錄中的 plist 文件由 root 用戶所有,這些 plist 文件用於系統範圍的服務和守護進程。~/Library/LaunchAgents 目錄用於用戶範圍的服務和守護進程。
3.載入和管理 plist 文件
使用 launchctl 命令載入和管理 plist 文件。例如,要啟動新的守護進程,請打開終端並輸入以下命令:
sudo launchctl load /Library/LaunchDaemons/my_daemon.plist
請注意,你需要使用 sudo 來以管理員身份運行此命令。
運行命令後,該守護進程即開始運行。使用以下命令可以停止該守護進程:
sudo launchctl unload /Library/LaunchDaemons/my_daemon.plist
四、常用的 launchctl 命令
下面是一些常用的 launchctl 命令及其用途:
sudo launchctl list
: 列出所有啟動項sudo launchctl list | grep <service_name>
: 搜索啟動項sudo launchctl load <path_to_plist_file>
: 載入一個 plist 文件sudo launchctl start <service_name>
: 啟動一個服務sudo launchctl stop <service_name>
: 停止一個服務sudo launchctl unload <path_to_plist_file>
: 卸載一個 plist 文件sudo launchctl remove <service_name>
: 移除一個啟動項
五、總結
通過上述內容,我們了解了 launchd 的概述、工作原理和使用方法。掌握 launchd 的使用對於開發人員和系統管理員來說都是非常重要的,這可以使他們更好地管理和排除 macOS 系統中的各種問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/237580.html