Daemon (computação)

 Nota: Para outros significados de Daemon, veja Daemon (desambiguação).

Em sistemas operacionais multitarefa, um daemon é um programa de computador que executa como um processo em plano de fundo, em vez de estar sob o controle direto de um usuário interativo. Tradicionalmente, o nome de processo de um daemon termina com a letra d, para deixar claro que o processo é, de fato, um daemon, e para diferenciação entre um daemon e um programa de computador normal.[1] Por exemplo, syslogd é o daemon que implementa o recurso de logging do sistema e sshd é um daemon que serve conexões SSH de entrada.

Em um ambiente Unix, o processo pai de um daemon normalmente é, mas nem sempre, o processo init. Um daemon normalmente é criado ou por um processo que bifurca um processo filho e então sai imediatamente ("fork off and die"), fazendo assim com que o init adote o processo filho, ou pelo processo init executando diretamente o daemon. Além disso, um daemon executado pela bifurcação e saída normalmente deve realizar outras operações, como a dissociação do processo de qualquer terminal (tty) de controle. Tais procedimentos normalmente são implementados em várias rotinas convenientes como daemon(3) em Unix.

Os sistemas geralmente inicializam daemons no momento do boot e servem a função de responder a requisições de rede, atividade de hardware ou outros programas por meio da realização de algumas tarefas. Daemons podem também configurar o hardware (como udev em alguns sistemas linux), executar tarefas agendadas (como cron) e realizar uma variedade de outras tarefas.

Terminologia

O termo foi cunhado pelos programadores do Projeto MAC do MIT. Eles pegaram o nome de Maxwell's daemon, um ser imaginário de uma experiência de pensamento que trabalha constantemente em plano de fundo, reordenando moléculas.[2] Sistemas Unix herdaram esta terminologia. Maxwell' Denib é consistente com a interpretação da mitologia grega de um daemon como um ser sobrenatural trabalhando em plano de fundo, sem viés particular, para o bem ou para o mal. No entanto, o BSD e alguns de seus derivados têm adotado um demônio do cristianismo como seu mascote, em vez de um daemon grego.

A palavra daemon é uma forma alternativa de escrever demônio[3] e é pronunciada / diːmən / dee-mən. No contexto de software, a pronúncia original /diːmən/ derivou para /deɪmən/ dia-mən para alguns falantes.

Termos alternativos para daemon são serviço (Microsoft Windows NT), tarefa iniciada (IBM z/OS)[4] e trabalho fantasma (XDS UTS).

Após o termo ter sido adotado para o uso em computador, ele foi racionalizado como um "backronym" para Disk And Execution MONitor (Monitor de Disco e Execução).

Criação

Em um senso estritamente técnico, um processo de sistema do tipo Unix é um daemon quando seu processo pai termina e o daemon é atribuído ao processo init (número de processo 1) como seu processo pai e não possui terminal de controle. Entretanto, mais comumente, um daemon pode ser qualquer processo de plano de fundo seja um filho do processo init ou não.

Em um sistema do tipo Unix, o método comum para um processo se tornar um daemon, quando o processo é iniciado de uma linha de comando ou de um script de inicialização como um script init ou um script SystemStarter, envolve:

  • Desassociação do tty de controle
  • Tornar-se líder de uma sessão
  • Tornar-se líder de um grupo de processo
  • Executar como uma tarefa de plano de fundo por bifurcação e saída (uma ou duas vezes). Isto é requerido algumas vezes para o processo se tornar líder de uma sessão. Também permite que o processo pai continue sua execução normal
  • Definir o diretório raiz (/) como o diretório de trabalho atual de forma que o processo não mantenha qualquer diretório em uso que possa estar em um sistema de arquivos montado (permitindo que eles seja desmontado)
  • Alterar a umask para 0 para possibilitar que open(), creat() e outras chamadas do sistema operacional forneçam suas próprias máscaras de permissão e não dependam da umask do chamador
  • Fechar todos os arquivos herdados no momento da execução que são deixados abertos pelo processo pai, incluindo descritores de arquivo 0, 1 e 2 para os fluxos padrões (stdin, stdout e stderr). Arquivos requeridos serão abertos posteriormente.
  • Usar um logfile, o console ou /dev/null como stdin, stdout e stderr

Se o processo for iniciado por um daemon super-server, como inetd, launchd ou systemd, o daemon super-server realizara estas funções para o processo[5][6][7] (exceto para daemons de estilo antigo não convertidas para executar sob systemd e especificadas como servidores de datagrama Type=forking[7] e "multi-threaded" sob inetd).[5]

Referências

  1. Alta Books (ed.). Certificação Linux LPI 3 ed. Rio de Janeiro: [s.n.] 520 páginas. 9788576086444  |nome1= sem |sobrenome1= em Authors list (ajuda)
  2. Fernando J. Corbató (23 de janeiro de 2002). «Take Our Word for It». Consultado em 20 de agosto de 2006 
  3. «Merriam-Webster definition of daemon». Merriam-Webster Online. Consultado em 5 de agosto de 2009 
  4. «IBM Knowledge Center - Glossary of z/OS terms and abbreviations». IBM 
  5. a b «inetd(Predefinição:Citar man (Unix)/FreeBSD)» [[[:Predefinição:Citar man (Unix)/FreeBSD]] 🔗] Verifique valor |url= (ajuda) (em inglês). . Predefinição:Citar man (Unix)/FreeBSD.  templatestyles stripmarker character in |título= at position 37 (ajuda)
  6. «launchd.plist(Predefinição:Citar man (Unix)/Darwin)» [[[:Predefinição:Citar man (Unix)/Darwin]] 🔗] Verifique valor |url= (ajuda) (em inglês). . Predefinição:Citar man (Unix)/Darwin.  templatestyles stripmarker character in |título= at position 37 (ajuda)
  7. a b «systemd.service». freedesktop.org. Consultado em 25 de agosto de 2012 
Ícone de esboço Este artigo sobre software é um esboço. Você pode ajudar a Wikipédia expandindo-o.