Learning Center
O sistema Linux

O que é um daemon na computação?

23 out. 2025
Hostman Team
Hostman Team

O termo daemon vem da mitologia grega antiga e referia-se a um ser imaterial que influenciava o mundo humano.

Na computação, especialmente em sistemas operacionais do tipo UNIX, um daemon é um processo em segundo plano que é executado sem interação direta do usuário. Ele não depende de um terminal ou interface gráfica e geralmente é iniciado junto com o sistema ou sob certas condições.

O que é um daemon
Copiar link

A principal função de um daemon é fornecer serviços específicos a outros processos ou usuários. Por exemplo, um daemon pode escutar portas de rede aguardando conexões, monitorar eventos do sistema e reagir quando determinadas condições são atendidas, gerenciar tarefas agendadas (como o cron), enviar e-mails (sendmail) e muito mais.

No Windows, o equivalente mais próximo de um daemon é um serviço (Service). A diferença está principalmente em como eles são iniciados, registrados, gerenciados e configurados dentro do sistema operacional. No entanto, o objetivo é o mesmo: garantir a operação contínua em segundo plano de certas funções ou serviços.

Principais características de um daemon

  • Executa em segundo plano: normalmente, o usuário não vê nenhuma interface do daemon; ele não escreve na saída padrão (ou a redireciona para logs) e não solicita entrada de teclado.

  • Autônomo: um daemon é iniciado na inicialização do sistema, quando é acionado por um sistema init (como o systemd), ou manualmente pelo usuário (via scripts, cron, etc.).

  • Longa duração: idealmente, um daemon é executado indefinidamente, a menos que ocorra um erro crítico ou ele receba um sinal de parada explícito.

  • Isolado: normalmente é executado sob uma conta de usuário ou grupo separado, com privilégios limitados, o que torna os serviços mais seguros e fáceis de gerenciar.

  • Registro: em vez de usar entrada/saída padrão, os daemons gravam informações em arquivos de log ou no registrador do sistema (journald, syslog, etc.), o que é útil para depuração e diagnóstico.

Daemons no Linux
Copiar link

Historicamente, quase todas as tarefas de segundo plano do sistema no Linux são implementadas como daemons. O sistema operacional inclui dezenas deles, cada um responsável por uma função específica. Alguns exemplos:

  • sshd (Secure Shell Daemon): escuta na porta 22 (por padrão) e permite que usuários remotos se conectem via SSH criptografado. Sem o sshd, o acesso remoto ao terminal seria praticamente impossível.

  • cron: um daemon de agendamento de tarefas. Ele verifica as entradas do crontab e executa scripts ou comandos em horários definidos, como limpeza de logs, envio de relatórios, verificações do sistema, etc.

  • syslogd / rsyslog / journald: daemons de registro do sistema que coletam mensagens do kernel, utilitários, outros daemons e aplicativos, salvando-as em arquivos de log ou no journal.

  • NetworkManager ou Wicd: daemons que gerenciam configurações de rede — automatizando conexões com redes com ou sem fio, alternância entre redes, configuração de VPNs e muito mais.

Esses daemons são iniciados junto com o sistema e registrados no gerenciador de serviços (por exemplo, systemd). Eles permanecem em execução até que o sistema seja desligado ou reiniciado. Os usuários interagem com eles indiretamente — por meio de arquivos de configuração, comandos de terminal (service, systemctl) ou solicitações de rede (se o daemon fornecer uma interface HTTP/S, SSH ou outra).

Como criar e gerenciar daemons
Copiar link

Para implementar um daemon, siga estas etapas:

  1. Criação do processo (fork): o processo pai chama fork() e continua a execução do código do daemon no processo filho.

  2. Desvincular do terminal de controle (setsid): para evitar interferência do usuário (por exemplo, fechar o terminal), o daemon chama setsid() para iniciar uma nova sessão e tornar-se o líder dela.

  3. Fechar descritores de entrada/saída padrão: como o daemon não deve escrever na tela nem aguardar entrada, stdin, stdout e stderr são fechados ou redirecionados para arquivos de log.

  4. Tratar sinais e registros: para permitir um desligamento limpo ou recarregamento de configuração, o daemon deve tratar sinais (SIGTERM, SIGHUP, etc.). O registro normalmente é feito via syslog ou arquivos.

  5. Loop principal: após a inicialização, o daemon entra em seu loop principal: aguarda eventos, os trata e repete até ser interrompido.

Vamos ver como criar um daemon no Ubuntu 22.04 usando um servidor em nuvem da Hostman.

1. Escrever o daemon em C

Crie um arquivo chamado mydaemon.c e insira o seguinte código:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <syslog.h>

int main() {
    // Abrir syslog
    openlog("mydaemon", LOG_PID, LOG_DAEMON);
    syslog(LOG_NOTICE, "Daemon started");

    // Loop infinito principal
    while (1) {
        // Suas tarefas em segundo plano: monitoramento, filas, etc.
        syslog(LOG_NOTICE, "Performing task...");
        sleep(60);
    }

    // Se o loop for encerrado
    syslog(LOG_NOTICE, "Daemon stopped");
    closelog();

    return 0;
}

2. Compilar o programa

Primeiro, atualize seus pacotes:

sudo apt update && sudo apt upgrade

Instale o compilador GCC, se ainda não estiver instalado:

sudo apt install gcc

Compile o daemon:

gcc mydaemon.c -o mydaemon

3. Mover o executável

Mova o binário para /usr/local/bin/, um local padrão para utilitários personalizados:

mv mydaemon /usr/local/bin/mydaemon

4. Criar um serviço systemd

Crie um arquivo de unidade chamado mydaemon.service:

sudo nano /etc/systemd/system/mydaemon.service

Insira o seguinte conteúdo:

[Unit]
Description=My Daemon
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mydaemon
Restart=on-failure

[Install]
WantedBy=multi-user.target

Explicação dos campos:

  • Description: descrição exibida no systemctl status.
  • After=network.target: garante que o daemon inicie após a rede estar ativa.
  • Type=simple: o daemon não cria subprocessos, é executado como um único processo.
  • ExecStart: caminho para o executável do daemon.
  • Restart=on-failure: reinicia automaticamente se o daemon falhar.
  • WantedBy=multi-user.target: faz o serviço iniciar no ambiente multiusuário padrão.

5. Iniciar e monitorar o daemon

sudo systemctl daemon-reload          # Recarregar configuração do systemd
sudo systemctl start mydaemon         # Iniciar o daemon
sudo systemctl status mydaemon        # Verificar status

Se tudo estiver funcionando, o status mostrará active. Para visualizar os logs:

journalctl -u mydaemon.service -e

Exemplos de uso de daemons
Copiar link

  • Servidores web

Sua função é escutar em uma porta de rede (geralmente 80 ou 443), aceitar solicitações HTTP/HTTPS, gerar uma resposta (como uma página HTML, dados JSON etc.) e enviá-la de volta ao cliente. Na maioria dos casos, um servidor web é iniciado com o sistema e permanece em execução até o desligamento ou execução de um comando de parada (por exemplo, systemctl stop nginx).

  • Daemons de banco de dados

MySQL/MariaDB, PostgreSQL, MongoDB — todos são daemons. Eles são iniciados com o sistema e continuam rodando em segundo plano, aceitando solicitações de aplicativos clientes ou serviços web. Esses daemons registram atividades, suportam configuração por arquivos e são gerenciados por utilitários específicos (ou systemd).

  • Agendadores de tarefas (cron, atd)

O daemon cron verifica a tabela de agendamentos (crontab) e executa programas nos horários ou intervalos definidos pelo usuário. Isso permite automatizar backups, atualizações do sistema, verificações de integridade e muitas outras tarefas rotineiras.

O atd é um daemon semelhante, mas executa tarefas apenas uma vez em um horário específico (diferente do cron, que as executa regularmente).

  • Access and Control Services (sshd, xrdp)

sshd (Secure Shell Daemon) fornece acesso remoto via protocolo SSH. xrdp permite conexões de desktop remoto usando o protocolo RDP. Ele atua como um daemon que escuta conexões de rede em uma porta específica.

  • Init System Daemons (systemd, init, Upstart)

Nos sistemas modernos, o papel do “daemon principal” é desempenhado pelo systemd (que substitui o antigo sistema SysV init). O systemd é o primeiro processo a ser iniciado após o kernel e é responsável por inicializar e gerenciar todos os outros serviços e processos. Ele os inicia em paralelo e gerencia suas dependências. Em resumo, o systemd é ele próprio um daemon que “orquestra” todos os outros do sistema.

Vantagens e desvantagens dos daemons
Copiar link

Vantagens:

  • Automação: os daemons permitem automatizar o comportamento do sistema — desde responder a solicitações de rede até agendar tarefas — sem intervenção do usuário.

  • Isolamento: por rodarem sob contas ou grupos separados e desvinculados do terminal, aumentam a segurança, limitando possíveis danos em caso de comprometimento.

  • Operação contínua: um daemon pode continuar prestando serviços (como um servidor web) sem interrupções, mesmo que o usuário saia ou feche o console.

  • Facilidade de gerenciamento: o Linux oferece ferramentas de sistema (como systemd e scripts init) para gerenciar todos os daemons de forma centralizada — iniciar, parar, reiniciar e registrar.

Desvantagens:

  • Complexidade de depuração: como os daemons rodam em segundo plano e não exibem saída no console, a depuração requer logs detalhados e configurações mais complexas (flags de debug, rastreamento, etc.).

  • Riscos de segurança: se um daemon for executado com privilégios elevados (por exemplo, como root), qualquer vulnerabilidade pode comprometer todo o sistema. É melhor executá-los com contas limitadas.

  • Gerenciamento de dependências: alguns daemons podem falhar se precisarem de acesso à rede antes que ela esteja ativa. Os sistemas init modernos resolvem isso, mas nos scripts SysV clássicos isso era comum.

  • Maior consumo de recursos: qualquer processo em execução contínua consome recursos do sistema (memória, CPU). Muitos daemons simultâneos podem impactar o desempenho, especialmente em sistemas com recursos limitados.

Conclusão
Copiar link

Os daemons são uma parte essencial da arquitetura dos sistemas operacionais Linux, oferecendo amplas capacidades de automação e serviços em segundo plano. Eles permitem que administradores configurem de forma flexível operações de rede, tarefas agendadas, logs, segurança e muito mais.

Escrever seu próprio daemon requer compreensão de processos, sinais, chamadas de sistema e atenção especial ao registro e à segurança.

Os sistemas init modernos (especialmente o systemd) simplificaram a gestão de daemons e a lógica de serviços, tornando a criação de serviços personalizados mais estruturada e flexível. No entanto, ainda é um campo complexo que exige design cuidadoso, depuração e manutenção contínua.

Se você busca uma solução confiável, de alto desempenho e econômica para seus fluxos de trabalho, a Hostman oferece opções de hospedagem VPS Linux, incluindo Debian VPS, Ubuntu VPS e VPS CentOS.