Daemon to proces działający w tle, bez własnego okna, terminala czy bezpośredniej interakcji z użytkownikiem. Jego zadanie to po cichu świadczyć jakąś usługę: nasłuchiwać na połączenia sieciowe, obsługiwać żądania, pilnować harmonogramu albo czekać na zdarzenie. Nazwa nie ma nic wspólnego z demonami z horrorów. Pochodzi od greckiego daemon, czyli niewidzialnego ducha, który po cichu wykonuje pracę w tle. Stąd zresztą sympatyczna maskotka BSD w postaci czerwonego diabełka. Po nazwach takich procesów najczęściej poznasz je po literce d na końcu: sshd, httpd, crond, systemd.
Jak to działa
Daemon zwykle startuje przy uruchomieniu systemu i działa, dopóki go nie zatrzymasz albo serwer się nie wyłączy. Tradycyjnie proces „demonizował się” sam: odłączał się od terminala, zamykał odziedziczone deskryptory i stawał się dzieckiem procesu init (PID 1), żeby nikt go przypadkiem nie ubił po zamknięciu konsoli. Dziś na większości dystrybucji Linuxa robotę przejął systemd. Sam pilnuje uruchamiania, restartów po awarii i zbierania logów, więc twój program nie musi już bawić się w te stare sztuczki z podwójnym fork().
W praktyce daemon to po prostu długo żyjący proces, który większość czasu śpi i czeka. Logi pisze nie na ekran, tylko do plików albo do journald, a komunikujesz się z nim przez gniazda, sygnały lub pliki konfiguracyjne, nie przez klawiaturę.
Przykład z praktyki
Najprostszy przykład: serwer SSH. Demon sshd nasłuchuje na porcie 22 i czeka, aż ktoś spróbuje się zalogować. Jego stan sprawdzisz komendą:
systemctl status sshd
A jeśli zmienisz konfigurację w /etc/ssh/sshd_config, przeładujesz go bez zrywania bieżących sesji przez systemctl reload sshd. Podobnie działa cron (czy nowszy systemd-timer), który w tle pilnuje, żeby twoje zadania odpaliły się o ustalonej godzinie.
Na co uważać
Dwa klasyczne potknięcia. Po pierwsze, daemon to nie to samo co usługa systemowa. „Usługa” (service) to abstrakcja zarządzana przez systemd, a daemon to konkretny proces, który ją realizuje. Po drugie, skoro nie ma terminala, to nie zobaczysz błędów na ekranie. Gdy coś nie wstaje, pierwszy ruch to journalctl -u nazwa, a nie wpatrywanie się w pustą konsolę. I drobiazg, który myli początkujących: w świecie Windows odpowiednikiem demona jest service uruchamiany przez menedżera usług, a nie żaden „daemon”.
Pojęcia powiązane
systemd, init, proces, PID, cron, demonizacja, fork, journalctl, usługa (service), background process.