Daemon (dator)
I multitasking -datoroperativsystem är en demon ( / ˈ d iː m ən / eller / ˈ d eɪ m ən / ) ett datorprogram som körs som en bakgrundsprocess , snarare än att vara under direkt kontroll av en interaktiv användare. Traditionellt slutar processnamnen för en demon med bokstaven d , för att förtydliga att processen faktiskt är en demon, och för att skilja mellan en demon och ett vanligt datorprogram. Till exempel syslogd en demon som implementerar systemloggningsfunktion, och sshd är en demon som betjänar inkommande SSH -anslutningar.
I en Unix- miljö är föräldraprocessen för en demon ofta, men inte alltid, init- processen. En demon skapas vanligtvis antingen genom att en process splittrar en underordnad process och sedan omedelbart avslutas, vilket får init att adoptera underprocessen, eller genom att init-processen direkt startar demonen. Dessutom måste en demon som startas genom forking och avsluta vanligtvis utföra andra operationer, såsom att dissociera processen från vilken som helst kontrollerande terminal (tty). Sådana procedurer implementeras ofta i olika bekvämlighetsrutiner som daemon(3) i Unix.
System startar ofta demoner vid uppstart som svarar på nätverksförfrågningar, hårdvaruaktivitet eller andra program genom att utföra någon uppgift. Demoner som cron kan också utföra definierade uppgifter vid schemalagda tider.
Terminologi
Termen myntades av programmerarna vid MIT:s Project MAC . Enligt Fernando J. Corbató , som arbetade på Project MAC 1963, var hans team de första att använda termen demon, inspirerad av Maxwells demon , en imaginär agent inom fysik och termodynamik som hjälpte till att sortera molekyler, och sa: "Vi började fantasifullt att använda ordet demon för att beskriva bakgrundsprocesser som arbetade outtröttligt för att utföra systemsysslor". Unix- system ärvde denna terminologi. Maxwells demon överensstämmer med grekisk mytologis tolkning av en demon som en övernaturlig varelse som arbetar i bakgrunden.
I allmän mening är demon en äldre form av ordet "demon", från grekiskan δαίμων. I Unix System Administration Handbook säger Evi Nemeth följande om demoner:
Många människor likställer ordet "demon" med ordet "demon", vilket antyder någon form av satanisk koppling mellan UNIX och underjorden . Detta är ett allvarligt missförstånd. "Daemon" är faktiskt en mycket äldre form av "demon"; demoner har ingen speciell fördom mot gott eller ont, utan tjänar snarare till att hjälpa till att definiera en persons karaktär eller personlighet. De antika grekernas koncept med en "personlig demon" liknade det moderna konceptet med en "skyddsängel" - eudaemonia är tillståndet att bli hjälpt eller skyddad av en vänlig ande. Som regel verkar UNIX-system vara infekterade av både demoner och demoner.
En ytterligare karaktärisering av den mytologiska symboliken är att en demon är något som inte är synligt men som alltid är närvarande och arbetar med sin vilja. I Theages , som tillskrivs Platon , beskriver Sokrates sin egen personliga demon som något som liknar det moderna begreppet moraliskt samvete: "Gudarnas gunst har gett mig en fantastisk gåva, som aldrig har lämnat mig sedan min barndom. Det är en röst som, när den gör sig hörd, avskräcker mig från det jag ska göra och aldrig manar mig vidare”. [ citat behövs ]
I modernt / . ˈd iːm ən bruk / uttalas ordet daemon DEE -mən I samband med datorprogram har det ursprungliga uttalet / ˈ d iː m ən / glidit till / ˈ d eɪ m ən / DAY -mən för vissa talare.
Alternativa termer för demon är service (används i Windows, från Windows NT och framåt, och senare även i Linux), startad uppgift (IBM z/OS ) och spökjobb (XDS UTS ).
Efter att termen antogs för datoranvändning, rationaliserades den som en bakronym för Disk And Execution MONitor.
Demoner som ansluter till ett datornätverk är exempel på nätverkstjänster .
Genomföranden
Unix-liknande system
I en strikt teknisk mening är en Unix-liknande systemprocess en demon när dess överordnade process avslutas och demonen tilldelas init- processen (process nummer 1) som sin överordnade process och har ingen styrande terminal. Men mer generellt kan en demon vara vilken bakgrundsprocess som helst, oavsett om det är ett barn till init-processen eller inte.
På ett Unix-liknande system innebär den vanliga metoden för att en process ska bli en demon, när processen startas från kommandoraden eller från ett startskript som ett init -skript eller ett SystemStarter -skript:
- Valfritt att ta bort onödiga variabler från miljön.
- Utföra som en bakgrundsuppgift genom att klaffa och avsluta (i den överordnade "halvan" av gaffeln). Detta gör att demonens förälder (skal eller startprocess) kan ta emot aviseringar om utgång och fortsätta sin normala körning.
- Att koppla från den anropande sessionen, vanligtvis utförd med en enda operation,
setsid()
:- Att ta avstånd från den kontrollerande tty .
- Skapa en ny session och bli sessionsledare för den sessionen.
- Att bli processgruppsledare .
- Om demonen vill säkerställa att den inte kommer att skaffa en ny kontrollerande tty ens av en slump (vilket händer när en sessionsledare utan en kontrollerande tty öppnar en gratis tty), kan den splittras och avslutas igen. Detta innebär att den inte längre är sessionsledare i den nya sessionen och inte kan skaffa en kontrollerande tty.
- Ställ in rotkatalogen ( / ) som den aktuella arbetskatalogen så att processen inte håller någon katalog i bruk som kan finnas på ett monterat filsystem (så att den kan avmonteras).
- Ändra umasken till 0 för att tillåta
open()
,creat()
, och andra operativsystemanrop att tillhandahålla sina egna behörighetsmasker och inte vara beroende av anroparens umask. - Omdirigerar filbeskrivningarna 0, 1 och 2 för standardströmmarna ( stdin , stdout och stderr ) till /dev/null eller en loggfil , och stänger alla andra filbeskrivningar som ärvts från den överordnade processen.
Om processen startas av en superserver- demon, såsom inetd , launchd eller systemd , kommer superserver-demonen att utföra dessa funktioner för processen, förutom gamla demoner som inte konverterats till att köras under systemd och specificeras som Type =forking och "multi-threaded" datagramservrar under inetd .
MS-DOS
I Microsoft DOS- miljön implementerades demonliknande program som terminate-and-stay-resident-program ( TSR).
Windows NT
På Microsoft Windows NT- system utför program som kallas Windows-tjänster funktionerna som demoner. De körs som processer, interagerar vanligtvis inte med bildskärmen, tangentbordet och musen och kan startas av operativsystemet vid uppstart. I Windows 2000 och senare versioner konfigureras Windows-tjänsterna och startas och stoppas manuellt med kontrollpanelen , ett dedikerat kontroll-/konfigurationsprogram, Service Controller-komponenten i Service Control Manager ( sc- kommando), kommandona net start och net stop eller PowerShell - skriptsystemet.
Men vilken Windows-applikation som helst kan utföra rollen som en demon, inte bara en tjänst, och vissa Windows-demoner har möjlighet att köra som en normal process.
Klassiskt Mac OS och macOS
På det klassiska Mac OS tillhandahölls valfria funktioner och tjänster av filer som laddades vid uppstart och som patchade operativsystemet; dessa var kända som systemtillägg och kontrollpaneler . Senare versioner av klassiskt Mac OS utökade dessa med fullfjädrade ansiktslösa bakgrundsprogram : vanliga program som kördes i bakgrunden. För användaren beskrevs dessa fortfarande som vanliga systemtillägg.
macOS , som är ett Unix- system, använder demoner men använder termen "tjänster" för att beteckna programvara som utför funktioner valda från Tjänster-menyn , snarare än att använda den termen för demoner, som Windows gör.
Se även
externa länkar
- Unix Daemon Server Programmering på Wayback Machine (arkiverad 2019-10-30)
- Linux Daemon Writing HOWTO