配置mac啟動項的3種方式總結(jié)
前言
在Mac OS X中,有三種方式來實現(xiàn)啟動項的配置:1)Login Items;2)StartupItems;3)launchd daemon。下面話不多說了,來一起看看詳細的介紹吧。
1. Login Items
打開System Preferences,選擇System -> Accounts,選擇Login Items選項卡,將/Applications目錄下的.app直接拖進右邊的列表中。重啟電腦之后就會發(fā)現(xiàn)列表中的程序在開機之后就自動啟動了。
2. StartupItems
StartupItems,顧名思義,就是在系統(tǒng)啟動過程中運行的程序,它們可以是運行完就立即終止的程序(比如,開機清空廢紙簍),也可以是一直持續(xù)在系統(tǒng)運行周期的后臺進程。
StartupItems一般存放在以下兩個路徑下:
1)/System/Library/StartupItems
2)/Library/StartupItems
大部分與系統(tǒng)相關(guān)的StartupItems都放在/System/Library/StartupItems這個路徑下,它們會先于/Library/StartupItems路徑下的執(zhí)行,因為前者路徑下的StartupItems提供了系統(tǒng)級的基礎(chǔ)服務(wù),比如crash reporting,core graphics services,system accounting等,而后者路徑在默認情況下是不存在的,需要自己手動創(chuàng)建。
這里我們以/Library/StartupItems目錄下的IcebergControlTower為例。
簡單來說,在Mac OS X上,一個StartupItems包含以下兩個方面的內(nèi)容:
1)可執(zhí)行程序;
2)包含依賴進程關(guān)系的plist文件(StartupParameters.plist)。
2.1 The Property List
2.1.1 Plist的key值與含義
StartupParameters.plist 是一個屬性列表,包含了運行可執(zhí)行程序的必要條件。
該plist需要獲得root權(quán)限,包含了幾個方面的內(nèi)容:
1.Description;
對該服務(wù)的一個簡單的描述,僅僅是描述,并不是說明實際的進程名稱。
2.Provides;
指定StartupItems提供的服務(wù)。如圖plist文件Provides中說明,StartupItems開啟的后臺進程名為:Iceberg Control Tower。
Provides可以指定多個服務(wù),反映在圖中就是Item0,Item1…等。這里只有Item0。
3.Uses;
指定了在StartupItems加載之前需要開啟的服務(wù)。Mac OS X系統(tǒng)先嘗試著加載Uses中指定的服務(wù),然后再加載StartupItems。也就是說,即使Uses中指定的服務(wù)沒有加載成功,系統(tǒng)仍然會加載StartupItems。
4.OrderPreference;
指定執(zhí)行StartupItems的時間順序。這個順序的重要程度排在Uses之后,是指定執(zhí)行完Uses之后的順序。可能的取值包括:First, Early, None(default), Late, Last。
5.Messages。
2.1.2 創(chuàng)建一個StartupParameters.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>Description</key> <string>Iceberg Control Tower Initilaization</string> <key>Provides</key> <array> <string>Iceberg Control Tower</string> </array> <key>Uses</key> <array> <string>Disks</string> </array> <key>OrderPreference</key> <string>None</string> </dict> </plist>
2.2 The Executable File
注意:
- 可執(zhí)行文件的名稱和它所在的文件夾的文件名是一樣的,這是系統(tǒng)默認的規(guī)則。
- 操作可執(zhí)行文件需要獲得root權(quán)限。
- 可執(zhí)行文件是一個shell腳本。
打開IcebergControlTower文件目錄下同名的可執(zhí)行文件,可以看到腳本的具體內(nèi)容:
一般的可執(zhí)行文件包含這樣幾個方面的內(nèi)容:
1)./etc/rc.common
Apple提供的一個腳本庫,該腳本庫里包含了為可執(zhí)行文件引進參數(shù)的接口。在這里load這個庫主要是調(diào)用RunService。
2)StartService(), StopService(), RestartService()
當可執(zhí)行文件接收到的參數(shù)為start,stop或者restart時,執(zhí)行相對應(yīng)的函數(shù)。
參數(shù)含義:
start:開機過程中開啟服務(wù);
stop:關(guān)機過程中停止服務(wù);
restart:在特定條件下重啟服務(wù)。
3)RunService “$1”
執(zhí)行傳遞給該腳本的第一個參數(shù)指定的服務(wù)。
“$1” 表示傳給該腳本的第一個參數(shù)。例如,傳入的參數(shù)為start,則執(zhí)行StartService()。
3. Launchd Daemon
launchd是Mac OS下用于初始化系統(tǒng)環(huán)境的關(guān)鍵進程,它是內(nèi)核裝載成功之后在OS環(huán)境下啟動的第一個進程。
采用這種方式來配置自啟動項很簡單,只需要一個plist文件,通常(同時也是系統(tǒng)推薦)是將plist放在~/Library/LaunchAgents路徑下。
3.1 plist文件格式及每個字段的含義:
1)Label【required】
該項服務(wù)的名稱。
2)OnDemand【optional】
10.4提供的一個key值,功能與KeepAlive的基本功能相似,在10.5及之后的系統(tǒng)中被KeepAlive替代。KeepAlive擴展了更多的功能,除了使用單一的boolean作為key值之外,還能使用字典結(jié)合多個key值。
3)Program【ProgramArgument是required的,在沒有ProgramArgument的情況下,必須要包含Program這個key】
指定可執(zhí)行文件的路徑。
4)RunAtLoad【optional】
標識launchd在加載完該項服務(wù)之后立即啟動路徑指定的可執(zhí)行文件。默認值為false。
5)WorkingDirectory【optional】
該key在開啟可執(zhí)行文件之前,指定當前工作目錄的路徑。
6)KeepAlive【optional】
這個key值是用來控制可執(zhí)行文件是持續(xù)運行呢,還是滿足具體條件之后再啟動。默認值為false,也就是說滿足具體條件之后才啟動。當設(shè)置值為ture時,表明無條件的開啟可執(zhí)行文件,并使之保持在整個系統(tǒng)運行周期內(nèi)。
3.2 創(chuàng)建一個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>com.yourcompany.HSPA_USB_MODEM</string> <key>OnDemand</key> <false/> <key>Program</key> <string>/Application/HSPA USB MODEM.app/Running</string> <key>RunAtLoad</key> <true/> <key>WorkingDirectory</key> <string>/Application/HSPA USB MODEM.app</string> </dict> </plist>
4. 三種方式的區(qū)別
初步了解了系統(tǒng)的啟動過程之后,再來看這三種配置啟動項的方式,就很容易理解這三種方式之間的差異了。
總的來說,LoginItems 和StartupItems的區(qū)別較明顯。
StartupItems | LoginItems | |
---|---|---|
Depedency Ordering | Need | Do not Need |
Load Timing | during startup | after a user logs in |
Launched by WHO | by root, but not necessarily | the user |
Processes types | background processes and processes that terminate after running | any Mac OS X executable |
對于我們自定義的Launchd daemon,通常(同時也是系統(tǒng)推薦)是放在~/Library/LaunchAgents路徑下。launchd進程需要在用戶login之后才能加載。這種方式與LoginItems最大的區(qū)別在于,啟動的進程不同。LoginItems是通過loginwindow去啟動的,而Launchd daemon是通過com.apple.launchd.peruser啟動。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
iOS逆向工程使用LLDB的USB連接調(diào)試第三方App
這篇文章主要介紹了iOS逆向工程使用LLDB的USB連接調(diào)試第三方App,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09IOS手勢操作(拖動、捏合、旋轉(zhuǎn)、點按、長按、輕掃、自定義)
這篇文章主要介紹了IOS手勢操作(拖動、捏合、旋轉(zhuǎn)、點按、長按、輕掃、自定義),需要的朋友可以參考下2015-07-07Objective-C實現(xiàn)自定義的半透明導(dǎo)航
這篇文章主要為大家詳細介紹了Objective-C實現(xiàn)自定義的半透明導(dǎo)航的相關(guān)資料,需要的朋友可以參考下2016-05-05iOS開發(fā)項目- 基于WebSocket的聊天通訊(1)
這篇文章主要介紹了iOS開發(fā)項目- 基于WebSocket的聊天通訊,WebSocket是web通信方式的一種,有需要的可以了解一下。2016-11-11iOS App中數(shù)據(jù)管理框架Core Data的基本數(shù)據(jù)操作教程
Core Data框架能夠為我們提供比操作SQL關(guān)系型數(shù)據(jù)庫更簡單的數(shù)據(jù)管理方式,而且內(nèi)置于Xcode中配合IDE操作十分方便,下面我們就來看一下iOS App中數(shù)據(jù)管理框架Core Data的基本數(shù)據(jù)操作教程2016-06-06