Joskus viime kesänä opiskelin hieman Mac OS X:n saloja, ja kirjoittelin muistiin ohjetta siitä, mitä kautta eri prosessit käynnistyvät. Syynä selvittelylle oli yksinkertaisesti se, etten ollut löytänyt mistään yhteenvetoa aiheesta - ainoastaan tiedonmuruja ja/tai vanhentunutta tietoa.
Homma jäi kuitenkin vaiheeseen, mutta sain mielestäni kasattua dokumenttia jo aika pitkälle. Sen sijaan, että jätän sen lojumaan omiin kansioihin, ajattelin heittää sen tänne muiden ihmeteltäväksi ja ennen kaikkea täydennettäväksi ja korjailtavaksi.
En tiedä, onko tämä foorumi oikea paikka tällaiselle kollaborointi-muokkaamiselle, sillä jokin wikin tapainenkin täältä ilmeisesti löytyy. Se näytti kuitenkin hieman kuolleelta, enkä jaksa nyt opiskella toista järjestelmää kun tunnen varmuudella vain tämän foorumin. Eli tässäpä raapustukseni.
================================================================================
Mac OS X 10.5.x:n käynnistyminen: mitä, missä, milloin?
Harri J. Talvitie <harri@x7.fi>
17.6.2009
1) Järjestelmätason launchd
Ensimmäisenä varsinaisena käyttöjärjestelmäprosessina käynnistyy launchd, vrt. SysV/BSD:n ja Linuxin init, Ubuntun upstart jne.
launchd on Mac OS X 10.4:ssä alkujaan esitelty taustaprosessien yhdistelmäkäynnistäjä, joka osaa asetuksesta riippuen käynnistää prosessin heti taustalle tai tietyn tapahtuman kuten ajastuksen tai verkkoliikenteen (esim. SSH-sisäänkirjautuja) perusteella.
launchd korvaa useita Unix/Linux-alustan perinteisiä käynnistäjiä kuten initin, rc:n, xinted:n, cronin, at:n jne. Ideana on, että kaikki prosessien käynnistämiseen liittyvä logiikka olisi koottu yhden katon alle.
launchd:n järjestelmätason määritykset on annettu hakemistossa /System/Library/LaunchDaemons/, ylläpitäjän erikseen asentamien sovellusten puolestaan hakemistossa /Library/LaunchDaemons/.
Koska launchd:n prosessitunniste (PID) on aina 1, on sen välittömästi käynnistämät prosessit helppo erottaa etsimällä prosesseja, joiden PPID (Parent Process ID) on 1.
2) SystemStarter
launchd käynnistää myös erityisen "legacy-käynnistysprosessin" SystemStarter, joka lukee asetustiedostonsa hakemistoista /System/Library/StartupItems/ ja /Library/StartupItems/.
SystemStarter on launchd:sta poiketen synkroninen, sillä se käynnistää kaikki prosessit välittömästi ja määrätyssä järjestyksessä - launchd tekee sen tarpeen mukaan, eikä järjestystä voi ennakoida. SystemStarter ja StartupItems-kansiot ovat perua Mac OS X 10.3 ja sitä aiemmista. Mac OS X 10.4:sta eteenpäin kaikki käynnistysoperaatiot tulisi tehdä uudella launchd-mekanismilla.
3) loginwindow
Koneen käynnistyessä launchd suorittaa aloitusvaiheen päätteeksi prosessin loginwindow, joka avaa Mac OS X:n graafisen sisäänkirjautumisruudun. Tämän käynnistys saadaan estettyä painamalla koneen herätessä Omppu-S.
4) Käyttäjätason launchd
Kun käyttäjä kirjautuu sisään, suoritetaan käyttäjäkohtainen launchd-prosessi joka toimii samalla periaatteella kuin järjestelmätason launchd. Järjestelmä- ja käyttäjäkohtaisen launchd-käynnistäjän terminologia poikkeaa dokumentaatioissa ja voi joskus hämätä: Käyttäjäkohtainen launchd käynnistää "agentteja", järjestelmäkohtainen vastaavasti "daemoneja". Teknisesti nämä ovat kuitenkin täysin samoja.
Käyttäjäkohtainen launchd lukee asetukset hakemistoista /System/Library/LaunchAgents/, ~/Library/LaunchAgents/ ja /Library/LaunchAgents/.
5) Login Itemit
Sisäänkirjautuessa loginwindow suoritaa Loginwindow-skriptejä, jotka on määritetty tiedostossa /Library/Preferences/com.apple.loginwindow.plist. Lisäksi käynnistetään käyttäjäkohtaiset Login Itemit, jotka on määritetty tiedostossa /Library/Preferences/loginwindow.plist.
6) Finderin ja sovellusten toimesta käynnistettävät
Finder käynnistää dokumentin avaamisen yhteydessä sille erikseen määritellyn sovelluksen, tai kysyy tunnistamattoman kohdalla millä dokumentti avataan. Oikean sovelluksen määräytymiseen on moniportaiset säännöstönsä (tiedostotyyppi, tiedostopääte, URL-skeema, MIME-tyyppi jne.).
Aihe on liian laaja tässä käsiteltäväksi, joten hyvä perusohje on selvittää käynnistyvä sovellus jollakin järjestelmätyökalulla, esim. RCDefaultApp. Hyödyllistä luettavaa on välineen FAQ-ohje: http://www.rubicode.com/Software/RCDefaultApp/faq.html
////
Korjattavaa, täydennettävää, linkkejä aiheeseen, .. ?
