Ohjelmat ja prosessit — johdanto

Kun tämän moduulin ensimmäisessä osassa annoit komentotulkille komennon uname -r, suunnilleen tällaista tapahtui:

  1. Komentotulkki ensin jäsentää komennon osiin. Välilyönti toimii erottimena: meillä on komento uname, jolle annetaan yksi parametri, -r.

  2. Komentotulkki tämän jälkeen tarkistaa, tunteeko se itse komentoa uname. Komentotulkilla on joitain omia sisäärakennettuja komentoja, mutta tämä ei kuulunut niihin.

    Komentotulkki päättelee, että kyseessä on siis jokin ulkoinen komento eli ajettava ohjelma.

  3. Komentotulkki katsoo ympäristömuuttujasta PATH, mistä hakemistoista ajettavia ohjelmia pitäisi etsiä. Tämän ympäristömuuttujan sisältönä on tyypillisesti jotain sen kaltaista kuin

    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    

    Tässä on :-merkillä eroteltuna erilaisia hakemistoja, joista ajettavia komentoja löytyy.

    Kokeile!

    Voit katsoa ympäristömuuttujan PATH sisällön näin:

    echo $PATH
    
  4. Komentotulkki alkaa etsiä tästä listasta ohjelmaa nimeltä uname. Lopulta tärppää: Linux-koneessasi on mitä luultavimmin hakemistossa /usr/bin tiedosto uname, joka on merkitty ajettavaksi ohjelmaksi.

    Kokeile!

    Onkohan sinunkin koneessasi näin? Voit kokeilla, mitä nämä komennot sanovat:

    ls -l /usr/bin/uname
    file /usr/bin/uname
    
  5. Komentotulkki luo nyt uuden prosessin, joka pyytää käyttöjärjestelmää lataamaan ja ajamaan tiedostosta /usr/bin/uname löytyvää ohjelmakoodia. Alkuperäinen komentotulkki jää taustalle odottamaan uuden prosessin valmistumista.

  6. Käyttöjärjestelmä varaa muistin ja muut tarvittavat resurssit tälle uudelle prosessille ja lataa ohjelmakoodin levyltä ja alkaa suorittaa sitä. Pääteohjelmalta tuleva syöte ohjataan tälle uudelle prosessille ja uuden prosessin tuloste ohjataan pääteohjelmalle. Käyttöjärjestelmä kertoo uudelle prosessille, että sille on annettu yksi komentoriviparametri -r.

  7. Nyt päästään lopulta ajamaan uname-ohjelmaa. Tämä ohjelma seuraa omaa ohjelmakoodiaan ja esimerkiksi tutkii, mitä komentoriviparametreja on annettu. Kun komentorivillä oli vain parametri -r, ohjelma ainoastaan hakee käyttöjärjestelmän versionumeron ja tulostaa sen tulostevirtaan (stdout), joka tässä tapauksessa ohjattiin pääteohjelmalle.

  8. Tämän jälkeen uname-ohjelma lopettaa ja tätä vastaava prosessi lopetetaan. Käyttöjärjestelmä vapauttaa tälle varatun muistin ja muut resurssit, ja herättelee taustalla odottelevan komentotulkin.

  9. Komentotulkki ottaa uudestaan ohjat ja tulostaa oman komentokehotteensa ja on valmiina ottamaan seuraavan komennon.

Tässä siis (ehkä muutaman millisekunnin ajan) koneessa oli käynnissä kaksi prosessia: komentotulkki ja sen lapsiprosessina ajossa ollut uname-ohjelma.

Jatketaanpa…

Palautusta lähetetään...