gildot

Topo
Sobre
FAQ
Tópicos
Autores
Preferências
Artigos
Sondagens
Propor artigo


8/3
gildicas
9/30
jobs
10/9
perguntas
10/25
press

 
pergunta sobre daemons
Contribuído por scorpio em 28-10-00 13:27
do departamento coders'r'us
consultorio andromeda escreve "Tenho uma perguta muito simples a fazer. Um daemon é um programa que está sempre a correr(suponho eu). A minha pergunta é: Um daemon tem alguma forma especial de ser feito ou é apenas um programa inicializado quando a máquina começa e que tem um ciclo infinito.
Caso exista essa tal forma especial de fazer daemons gostava que ma dissessem. Se possível gostava que me indicassem alguma documentação e também gostava de saber como funcionam os daemons em Linux e em Windows. Obrigado pela atenção. "

Linux vs. Windows 2000 | BarraPunto em obras  >

 

gildot Login
Login:

Password:

Referências
  • Linux
  • Mais acerca consultorio
  • Também por scorpio
  • Perguntas
  • Como se pode ter o seu próprio host ?
  • Linux preparado para 'enterprise'?
  • Produtividade: linha de comando vs IDE
  • Sistemas operativos: O que são?
  • linux distribuído nas revistas, sim ou não ?
  • Pergunte ao Gildot: qual o melhor codificador de mp3?
  • staroffice
  • Esta discussão foi arquivada. Não se pode acrescentar nenhum comentário.
    fork you (Pontos:1)
    por Sub em 28-10-00 14:04 GMT (#1)
    (Utilizador Info)
    aqui vai uma rapidinha.

    em unix, o segredo está no "fork". fazes a inicialização toda do daemon normalmente e usas a instrução fork para "dividir" a execução em dois ramos. Um deles pode acabar logo de seguida (deixando assim a tua prompt livre, terminando a execução, pelo menos aparente do programa) e o outro ramo com o código que fizer o trabalho todo: escutar num socket, processar pedidos, etc etc etc.

    não há literatura dedicada 100% aos daemons. consulta um bom livro de C (man fork também funciona) e se estiveres com o estômago bem protegido, dá uma vista de olhos ao source code de coisinhas pequenas que corram como daemons (assim de momento só me lembro do "biff")
    Mr. Stevens's books (Pontos:1)
    por b0fh em 28-10-00 15:18 GMT (#2)
    (Utilizador Info)
    Lê o Unix Network Programming. É muito bom. Deve estar em todas as bibliotecas de todos os departamentos de Eng. Informática (pelo menos está no DEI - UC(PUB) :) Basicamente: como o autor anterior disse, o fork(2) é o pricipal. Convem fazeres tambem um chdir(/), para não estares a impedir filesystems de serem montados/desmontados. Fechar os descriptores de ficheiros também é boa ideia (não precisas de stdin, stdout e stderr...
    sao mesmo uns Deamons para se fazer >:> (Pontos:2, Informativo)
    por ajcm em 28-10-00 15:53 GMT (#3)
    (Utilizador Info) http://www.ajcm.cjb.net
    Não e so fazer um fork(),tens k fazer o tratamento de sinais , tens fazer k o o processo seja "lider" do seu proprio grupo de processos e todo o processamento relativo a isso, e que n retome controlo do Terminal entre outros. E a k ter em antecao k um deamon poder ser lancado da consola ou atraves do Init. E k existem algumas diferencas a nivel da implementacao entre BSD e SYS V. O melhor coisa e sacar o exemplo do livro de W Stevens :)) (H.P. do Stevens www.kohala.com/start )
    end.
    deamons//Daemons Opps :) (Pontos:1)
    por ajcm em 28-10-00 15:55 GMT (#4)
    (Utilizador Info) http://www.ajcm.cjb.net
    .
    end.
    Re:sao mesmo uns Deamons para se fazer >:> (Pontos:0)
    por Anonimo Cobarde em 30-10-00 13:50 GMT (#7)
    E tb a k aprender a esqrever em purtuges
    daemons (Pontos:3, Esclarecedor)
    por BlueNote em 28-10-00 16:02 GMT (#5)
    (Utilizador Info)
    Tal como foi dito, a chave para colocar um processo em background é o fork. No entanto, para criar um daemon é necessário algo mais.

    Temos de mudar de grupo de processo para que o daemon não receba nem envie sinais para nenhum terminal, ou seja, corra efectivamente de forma autónoma - a comunicação tem de ser feita através de comandos como o kill.

    Temos também de inicializar uma nova sessão para o processo do daemon e de redireccionar ou fechar os descritores de ficheiros default, stdin, stdout e stderr.

    Também devemos mudar o directório de execução para algo seguro, para não impedir a desmontagem de filesystems, por exemplo, e cuidar das permissões que queremos para ficheiros que venhamos a criar através de umask() (se o código estiver em C, claro. Para outras linguagens existirá algo equivalente).Se quisermos uma inicialização automática temos de criar scripts(em /etc/rc.d/init.d ou equivalente, depende da distribuição)

    Sintéticamente, usando linguagem C:

    /* operações iniciais */

    fork(); /* novo processo, a seguir só me refiro à child */

    /* fechar todos os descritores abertos */

    setsid(); /* nova sessão */

    fork(); /* tornamo-nos child do init */

    chdir();

    umask();

    /* abrir stdin, stdout e stderr (tipicamente direccionados para ficheiros de log ou /dev/null) */

    /* operações do daemon propriamente dito */

    /* atenção: para uma correcta operação, não esquecer de criar uma função para terminar o processo quando captura um SIGTERM (kill -15...) e outros sinais relevantes */

    Isto é só um exemplo muito sintético. Há tempos imprimi um artigo do linux journal n.o 47 - Março de 1998 chamado "creating daemon processes" de Ivan Griffin & John Nelson, que aconselho vivamente, procura nos arquivos on-line.
    daemon (Pontos:1)
    por cgd em 29-10-00 22:37 GMT (#6)
    (Utilizador Info) http://cgd.teleweb.pt

    ja agora, o significado de daemon: Disk And Execution MONitor


    -- carlos

     

     

    [ Topo | Sugerir artigo | Artigos anteriores | Sondagens passadas | FAQ | Editores | Preferências | Contacto ]