O que é um Daemon?

12

Eu ouço muita conversa sobre Daemons rodando no meu computador Ubuntu - o que são?

Marco Ceppi
fonte

Respostas:

15

Em resumo, um Daemon é um processo em segundo plano .

Os daemons podem ser apenas programas normais executados em segundo plano; no entanto, a maioria é criada iniciando um processo, bifurcando-o e saindo do pai.

Forçar um processo significa criar uma cópia exata dele. O pai desse processo, se o pai real terminar imediatamente, agora é o processo init/sbin/init , que é a primeira coisa iniciada em todos os sistemas operacionais do tipo Unix. Agora, o processo é denominado Daemon, não possui TTY associado.

Aqui está um exemplo de um Daemon em Python:

import sys, os, time

pid = os.fork()

# there now exist two processes
if pid > 0: # If this is the parent,
    sys.exit(0) # quit.

# this is the background part:
time.sleep(5)
print "Hello, World!"

Ainda não é um, a rigor. Você também teria que alterar o diretório de trabalho atual, redict a entrada e saída padrão para arquivos de log e assim por diante. Você pode ler os detalhes sangrentos neste artigo da wikipedia .

Se você executar o exemplo, notará que, após dois segundos, ele é impresso, mesmo que o processo iniciado na linha de comando tenha terminado. A cópia deste processo é executada 'por' init agora.

Stefano Palazzo
fonte
8
Para expandir isso, se você está vindo do Linux para Windows, pode pensar em daemons como o equivalente * nix dos "serviços" do Windows.
Nathwill
1
@ stefano-palazzo Você disse "... não tem TTY associado", mas depois "... você notará, depois de dois segundos ele imprime ...". Eu pensei que desanexar o TTY significava que você não podia escrever no terminal.
Jorge Bucaran
1
@JorgeBucaran Sim. A impressão é um pouco travessa. Ele ainda pode ter um identificador para o fluxo de saída padrão do tty que o iniciou. Quando você abre um arquivo (como / dev / stdout), obtém um número (chamado de descritor de arquivo), e isso é tudo o que você precisa para gravar desde que o processo que o abriu ainda esteja em execução (você pode ver arquivos abertos em /proc/*/fd). Um daemon bem comportado se desconectará completamente do tty, abandonando as alças para stdout, stderr e stdin.
Stefano Palazzo
1
@StefanoPalazzo eu vejo. Pode-se manter uma referência ao processo dos pais std / out / err e ainda assim se destacar. Se eu puder arbitrariamente manter uma referência ao TTY, o que significa desanexar um processo? Achei < superuser.com/questions/178587/… > útil, mas ainda não estou claro.
Jorge Bucaran
1
@JorgeBucaran significa substituir os próprios stdio dos processos (por exemplo, usando dup2 ) pelos novos que você criou (como um arquivo de log). Aqui está um exemplo completo
Stefano Palazzo
1

Nos sistemas operacionais de multitarefa, um daemon é um programa de computador que é executado como um processo em segundo plano, em vez de estar sob o controle direto de um usuário interativo. Tradicionalmente, os nomes de processos de um daemon terminam com a letra d, para esclarecer que o processo é, de fato, um daemon e para diferenciar entre um daemon e um programa de computador normal. Por exemplo, syslogd é o daemon que implementa o recurso de log do sistema e sshd é um daemon que serve conexões SSH de entrada.

Como você pode ver a camada do Daemon

Tarifas Younis
fonte
2
de onde é a citação?
Zanna