Esta discussão foi arquivada. Não se pode acrescentar nenhum comentário. | | | 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") |
| | | | 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... |
| | | | 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. |
| | | | | por Anonimo Cobarde em 30-10-00 13:50 GMT (#7) |
| E tb a k aprender a esqrever em purtuges |
| | | | 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. |
| | | | ja agora, o significado de daemon: Disk And Execution MONitor -- carlos
|
| |
|