Daemon

From Wikipedia, the free encyclopedia

Remove ads

Daemon (palveluprosessi) on Unixissa ja Unixin kaltaisissa käyttöjärjestelmissä taustalla suoritettava järjestelmäohjelma, jota käyttäjä ei suoraan hallitse.[1] Myös muissa moniajoa tukevissa käyttöjärjestelmissä on vastaava käsite. Käyttöjärjestelmä käynnistää daemonit käynnistyessään (usein, mutta ei aina, ne käynnistää init) ja niiden tehtävänä on esimerkiksi vastata verkosta tuleviin palvelupyyntöihin (WWW-palvelin-daemon, SSH-palvelin-daemon), hoitaa tulostustöitä tai käynnistää ajastettuja tehtäviä, kuten varmuuskopioinnin.

Tämä artikkeli käsittelee tietokonejärjestelmien taustaprosesseja. Kreikkalaisessa mytologiassa daemon tai daimoni (δαίμων) tarkoittaa suojelushenkeä tai puolijumalaa.

Tyypillisesti daemonien nimi päättyy d-kirjaimeen: syslogd huolehtii järjestelmälokista, sshd saapuvista SSH-yhteyksistä ja crond ajastetuista tehtävistä.

Remove ads

Unix-daemon

Daemonit ovat prosesseja, jotka elävät pitkän aikaa: ne yleensä käynnistetään järjestelmän käynnistyessä ja sammutetaan järjestelmän sammutuksessa.[2] Daemonit suoritetaan taustalla koska niillä ei ole ohjaavaa päätettä.[2] Koska daemoneilla ei ole ohjaavaa päätettä virheviestien käsittely tapahtuu normaalisti järjestelmälokin avulla.[2]

Daemonien toteutuksessa on eroja tehdäänkö se perinteisellä System V -tavalla vai uudella Linuxissa käytetyllä tavalla.[3] Myös Mac OS X:ssä on eroja perinteiseen System V -tapaan verrattuna.[3][4] Uudet ratkaisut kuten systemd ja launchd tukevat käyttäjäkohtaisien daemonien käynnistämistä (user units, user agents).[5][4]

Minimalistinen daemon-ohjelma[2][6]:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(void)
{
    pid_t pid, sid;

    pid = fork();
    if (pid < 0)
        exit(EXIT_FAILURE); /* lapsiprosessin luonti epäonnistui */
    if (pid > 0)
        exit(EXIT_SUCCESS); /* isäntäprosessi poistuu */

    umask(0); /* tiedosto-oikeudet */

    sid = setsid();
    if (sid < 0)
        exit(EXIT_FAILURE);
    if (chdir("/") < 0)
        exit(EXIT_FAILURE);

    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);

    /* tee jotain daemonissa */
    while (1)
        sleep(10);

    return (0);
}

Daemonin voi käynnistää järjestelmä käynnistyessään, käyttäjä päätteellä tai komentokieliohjelma (skripti).[6] Käynnistyessään se on kuten mikä tahansa suoritettava ohjelma järjestelmässä, mutta autonomiseksi sen tekee lapsiprosessin käynnistäminen fork()-kutsulla.[6] Lapsiprosessin käynnistämisen jälkeen isäntäprosessi voi poistua ja ohjelma jatkaa suoritusta.[6]

Tiedostomaski asetetaan umask()-kutsulla, jolla merkitään pääsy daemonin luomiin tiedostoihin.[6]

Istuntotunniste lapsiprosessille asetetaan setsid()-kutsulla.[6]

Työhakemisto vaihdetaan juurihakemistoon, joka on taattu olemassa olevaksi ja muut hakemistot voivat poistua mikäli levy otetaan pois käytöstä.[6]

Lisäksi tietyt tiedostokahvat suljetaan koska daemonilla ilman ohjaavaa päätettä ei ole niille käyttöä.[6]

Remove ads

Etymologia

Daemon-nimen keksivät MIT:n Project MAC -ohjelmoijat vuonna 1963.[1] He ottivat nimen Maxwellin demonilta, joka on fyysikko James Clerk Maxwellin esittämässä ajatuskokeessa taustalla herkeämättä molekyylejä lajitteleva pieni olento.[7]

Myöhemmin "daemon" on väärin siteerattu retronyymiksi engl. sanoista Disk And Execution MONitor, ’levy- ja suoritusvalvoja’.[8]

Daemonien vastine Windowsissa

Microsoft Windows -järjestelmissä vastaavankaltaisia ohjelmia kutsutaan palveluiksi (engl. services).[1]

Katso myös

Lähteet

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads