Daemon

De la Wiki.lug.ro
Salt la: navigare, căutare

În jargonul Linux și al altor sisteme de operare de tip Unix, un daemon este un program care rulează în fundal, fără a fi controlat direct de un utilizator. În general, denumirea unui astfel de program se termină cu litera "d". Exemple: syslogd (system log daemon), sshd (secure shell daemon), httpd (http server daemon), ftpd (ftp server daemon) etc.

Strict tehnic vorbind, un proces este daemon atunci când procesul părinte își termină execuția și este "adoptat" de procesul init (procesul cu numărul 1) ca proces părinte și nu are un terminal care să-l controleze. În utilizarea uzuală însă, un daemon poate fi orice proces de fundal, fie că este copil al init sau nu.

Metoda uzuală prin care un proces devine daemon implică următoarele:

  • disocierea de terminalul care îl controlează
  • devine lider de sesiune
  • devine lider al unui grup de procese
  • rămâne în fundal prin forking și ieșire (o dată sau de două ori). Aceasta este necesar uneori pentru ca procesul să devină lider de sesiune și permite procesului părinte să-și continue execuția normală
  • stabilește directorul rădăcină ("/") ca director de lucru curent astfel ca procesul nu va bloca alt director care ar putea fi pe un sistem de fișiere montat (permițând astfel demontarea acestuia).
  • schimbarea umask la 0 pentru a permite apelurilor de tip open(), create() etc. să atribuie propriile măști de permisiune și să nu depindă de umask-ul procesului care l-a apelat
  • închiderea tuturor fișierelor moștenite deschise de la procesul părinte la momentul execuției, inclusiv descriptorii de fișier 0, 1 și 2 (stdin, stdout, stderr). Fișierele necesare vor fi deschise ulterior
  • folosirea unui fișier jurnal, a consolei sau a /dev/null ca stdin, stdout și stderr

Echivalentul aproximativ Windows pentru daemon-i sunt serviciile.

Vezi: wikipedia:Daemon (computer software) (în engleză)