Daemon (palveluprosessi) onUnixissa jaUnixin kaltaisissa käyttöjärjestelmissä taustalla suoritettavajärjestelmäohjelma, jota käyttäjä ei suoraan hallitse.[1] Myös muissamoniajoa tukevissakä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ä, kutenvarmuuskopioinnin.
Tyypillisesti daemonien nimi päättyy d-kirjaimeen:syslogd huolehtiijärjestelmälokista,sshd saapuvistaSSH-yhteyksistä jacrond ajastetuista tehtävistä.
Daemonit ovatprosesseja, 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 ohjaavaapää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 uudellaLinuxissa käytetyllä tavalla.[3] MyösMac OS X:ssä on eroja perinteiseen System V -tapaan verrattuna.[3][4] Uudet ratkaisut kutensystemd jalaunchd 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>intmain(void){pid_tpid,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ä taikomentokieliohjelma (skripti).[6] Käynnistyessään se on kuten mikä tahansa suoritettava ohjelma järjestelmässä, mutta autonomiseksi sen tekee lapsiprosessin käynnistäminenfork()-kutsulla.[6] Lapsiprosessin käynnistämisen jälkeen isäntäprosessi voi poistua ja ohjelma jatkaa suoritusta.[6]
Tiedostomaski asetetaanumask()-kutsulla, jolla merkitään pääsy daemonin luomiin tiedostoihin.[6]
Istuntotunniste lapsiprosessille asetetaansetsid()-kutsulla.[6]
Työhakemisto vaihdetaanjuurihakemistoon, 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:nProject MAC -ohjelmoijat vuonna 1963.[1] He ottivat nimenMaxwellin demonilta, joka on fyysikkoJames Clerk Maxwellin esittämässä ajatuskokeessa taustalla herkeämättä molekyylejä lajitteleva pieni olento.[7]
Myöhemmin "daemon" on väärin siteeratturetronyymiksi engl. sanoistaDisk And Execution MONitor, ’levy- ja suoritusvalvoja’.[8]
Microsoft Windows -järjestelmissä vastaavankaltaisia ohjelmia kutsutaan palveluiksi (engl.services).[1]