三種方式配置Mac OS X的啟動項


在Mac OS X中,有三種方式來實現啟動項的配置:1)Login Items;2)StartupItems;3)launchd daemon。

1.Login Items

打開System Preferences,選擇System -> Accounts,選擇Login Items選項卡,將/Applications目錄下的.app直接拖進右邊的列表中。重啟電腦之后就會發現列表中的程序在開機之后就自動啟動了。

2.StartupItems

StartupItems,顧名思義,就是在系統啟動過程中運行的程序,它們可以是運行完就立即終止的程序(比如,開機清空廢紙簍),也可以是一直持續在系統運行周期的后台進程。

StartupItems一般存放在以下兩個路徑下:

1)/System/Library/StartupItems

2)/Library/StartupItems

大部分與系統相關的StartupItems都放在/System/Library/StartupItems這個路徑下,它們會先於/Library/StartupItems路徑下的執行,因為前者路徑下的StartupItems提供了系統級的基礎服務,比如crash reporting,core graphics services,system accounting等,而后者路徑在默認情況下是不存在的,需要自己手動創建。

這里我們以/Library/StartupItems目錄下的IcebergControlTower為例。

簡單來說,在Mac OS X上,一個StartupItems包含以下兩個方面的內容:

1)可執行程序;

2)包含依賴進程關系的plist文件(StartupParameters.plist)。

2.1 The Property List

2.1.1 Plist的key值與含義

StartupParameters.plist 是一個屬性列表,包含了運行可執行程序的必要條件。

該plist需要獲得root權限,包含了幾個方面的內容:

1)Description;

      對該服務的一個簡單的描述,僅僅是描述,並不是說明實際的進程名稱。

2)Provides;

      指定StartupItems提供的服務。如圖plist文件Provides中說明,StartupItems開啟的后台進程名為:Iceberg Control Tower。

      Provides可以指定多個服務,反映在圖中就是Item0,Item1…等。這里只有Item0。

3)Uses;

     指定了在StartupItems加載之前需要開啟的服務。Mac OS X系統先嘗試着加載Uses中指定的服務,然后再加載StartupItems。也就是說,即使Uses中指定的服務沒有加載成功,系統仍然會加載StartupItems。

4)OrderPreference;

     指定執行StartupItems的時間順序。這個順序的重要程度排在Uses之后,是指定執行完Uses之后的順序。可能的取值包括:First, Early, None(default), Late, Last。

5)Messages。

2.1.2 創建一個StartupParameters.plist文件

[html]  view plain  copy
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"   
  3.     "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
  4. <plist version="1.0">  
  5. <dict>  
  6.     <key>Description</key>  
  7.     <string>Iceberg Control Tower Initilaization</string>  
  8.     <key>Provides</key>  
  9.     <array>  
  10.         <string>Iceberg Control Tower</string>  
  11.     </array>  
  12.      <key>Uses</key>  
  13.     <array>  
  14.         <string>Disks</string>  
  15.     </array>  
  16.     <key>OrderPreference</key>  
  17.         <string>None</string>  
  18. </dict>  
  19. </plist>  


 

2.2 The Executable File

注意:1)可執行文件的名稱和它所在的文件夾的文件名是一樣的,這是系統默認的規則。

      2)操作可執行文件需要獲得root權限。

      3)可執行文件是一個shell腳本。

打開IcebergControlTower文件目錄下同名的可執行文件,可以看到腳本的具體內容:

一般的可執行文件包含這樣幾個方面的內容:

1)./etc/rc.common

Apple提供的一個腳本庫,該腳本庫里包含了為可執行文件引進參數的接口。在這里load這個庫主要是調用RunService。

2)StartService(), StopService(), RestartService()

當可執行文件接收到的參數為start,stop或者restart時,執行相對應的函數。

參數含義:

start:開機過程中開啟服務;

stop:關機過程中停止服務;

restart:在特定條件下重啟服務。

3)RunService  “$1”

執行傳遞給該腳本的第一個參數指定的服務。

“$1” 表示傳給該腳本的第一個參數。例如,傳入的參數為start,則執行StartService()。

3. Launchd Daemon

launchd是Mac OS下用於初始化系統環境的關鍵進程,它是內核裝載成功之后在OS環境下啟動的第一個進程。

采用這種方式來配置自啟動項很簡單,只需要一個plist文件,通常(同時也是系統推薦)是將plist放在~/Library/LaunchAgents路徑下。

3.1 plist文件格式及每個字段的含義:

1)Label【required】

該項服務的名稱。

2)OnDemand【optional】

10.4提供的一個key值,功能與KeepAlive的基本功能相似,在10.5及之后的系統中被KeepAlive替代。KeepAlive擴展了更多的功能,除了使用單一的boolean作為key值之外,還能使用字典結合多個key值。

3)Program【ProgramArgument是required的,在沒有ProgramArgument的情況下,必須要包含Program這個key】

指定可執行文件的路徑。

4)RunAtLoad【optional】

標識launchd在加載完該項服務之后立即啟動路徑指定的可執行文件。默認值為false。

5)WorkingDirectory【optional】

該key在開啟可執行文件之前,指定當前工作目錄的路徑。

6)KeepAlive【optional】

這個key值是用來控制可執行文件是持續運行呢,還是滿足具體條件之后再啟動。默認值為false,也就是說滿足具體條件之后才啟動。當設置值為ture時,表明無條件的開啟可執行文件,並使之保持在整個系統運行周期內。

3.2 創建一個plist文件:

[html]  view plain  copy
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"   
  3.     "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
  4. <plist version="1.0">  
  5. <dict>  
  6.     <key>Label</key>  
  7.     <string>com.yourcompany.HSPA_USB_MODEM</string>  
  8.     <key>OnDemand</key>  
  9.     <false/>  
  10.     <key>Program</key>  
  11.     <string>/Application/HSPA USB MODEM.app/Running</string>  
  12.     <key>RunAtLoad</key>  
  13.     <true/>  
  14.     <key>WorkingDirectory</key>  
  15.     <string>/Application/HSPA USB MODEM.app</string>  
  16. </dict>  
  17. </plist>  

4.三種方式的區別

初步了解了系統的啟動過程之后(http://blog.csdn.net/abby_sheen/article/details/7817132),再來看這三種配置啟動項的方式,就很容易理解這三種方式之間的差異了。

總的來說,LoginItems 和StartupItems的區別較明顯。

 

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,通常(同時也是系統推薦)是放在~/Library/LaunchAgents路徑下。launchd進程需要在用戶login之后才能加載。這種方式與LoginItems最大的區別在於,啟動的進程不同。LoginItems是通過loginwindow去啟動的,而Launchd daemon是通過com.apple.launchd.peruser啟動。

 

http://blog.csdn.net/testcs_dn/article/details/67636464


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM