Daemon

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ä.

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]

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

  1. Daemon Definition linfo.org. Viitattu 7.9.2021. (englanniksi)
  2. Stevens, W. Richard: Advanced Programming in the UNIX Environment, s. 415425. Addison-Wesley, 1993. ISBN 0201563177. (englanniksi)
  3. daemon(7) man7.org. Viitattu 7.9.2021. (englanniksi)
  4. 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. Devin Watson: Linux Daemon Writing HOWTO netzmafia.de. toukokuu 2004. 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.
    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.