天天看點

Mac OS X的啟動過程

在開啟電腦之後,打開Console,從Log List中選擇FILES目錄下的system.log,可以大緻了解系統啟動之後進行的工作。

首先,找到與電腦開啟時間相符的log資訊:localhost com.apple.launchd[1]:***launchd[1] has started up.*** 這說明launchd是在核心完成加載後,系統開啟的第一個程序。

接着log資訊裡顯示啟動了各種程序,比如bootlog,blued,mDNSResponder等。系統是如何加載這些的呢?

launchd開啟之後,會依次去完成以下的工作:

1)根據/System/Library/LaunchDaemons 和/Library/LaunchDaemons路徑下的plist檔案,加載系統級守護程序; 2)注冊上述守護程序需要的套接字及檔案描述符; 3)根據plist檔案中的KeepAlive鍵值,啟動那些需要在系統周期内一直保持的程序; 4)根據plist檔案中的設定,在條件滿足時啟動程序; 5)關機時,給所有由launchd開啟的程序發送SIGTERM信号。

這時,我們将log資訊中的内容與/System/Library/LaunchDaemons路徑下的plist進行對照,發現在系統開啟之初的bootlog,blued,mDNSResponder等都能再該路徑下找到。

LaunchDaemons路徑下的plist指定的程序啟動是否存在一定的先後順序呢?

在launchd依次完成的工作中,可以看到它是先注冊套接字和檔案描述符,然後才去啟動程序,是以plist指定的程序的啟動先後順序并不明确。

launchd配置檔案總共有五個路徑,在系統開啟之初,隻加載了/System/Library/LaunchDaemons 和/Library/LaunchDaemons路徑下的plist檔案,另外三個路徑下的plist檔案是在使用者login之後才進行的。

使用者的login是由loginwindow程序完成的,而loginwindow的啟動又是由/System/Library/LaunchDaemons路徑下的com.apple.loginwindow.plist指定的。使用者登入之後,launchd才會去加載/System/Library/LaunchAgents 和/Library/ LaunchAgents以及~/Library/LaunchAgents路徑下的plist檔案,進而根據plist檔案的具體設定去啟動相應的程序。

在log資訊中我們還可以看到這個程序:com.apple.SystemStarter。StartupItems的加載就是由這個程序來完成的。

繼續閱讀