Daemon

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

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.

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

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]

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

[muokkaa | muokkaa wikitekstiä]

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

  1. a b c Daemon Definition linfo.org. Viitattu 7.9.2021. (englanniksi)
  2. a b c d Stevens, W. Richard: Advanced Programming in the UNIX Environment, s. 415–425. Addison-Wesley, 1993. ISBN 0201563177 (englanniksi)
  3. a b daemon(7) man7.org. Viitattu 7.9.2021. (englanniksi)
  4. a b Creating Launch Daemons and Agents developer.apple.com. Viitattu 7.9.2021. (englanniksi)
  5. systemd/User wiki.archlinux.org. Viitattu 12.9.2021. (englanniksi) 
  6. a b c d e f g h Devin Watson: Linux Daemon Writing HOWTO netzmafia.de. toukokuu 2004. Arkistoitu 27.10.2019. Viitattu 7.9.2021. (englanniksi)
  7. Fernando J. Corbató: Take Our Word for It takeourword.com. 23.1.2002. Viitattu 20.8.2006.
  8. Eric S. Raymond. "daemon" catb.org.