shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[shell-script] Como criar um processo Daemon


From: marcos . laureano
Subject: [shell-script] Como criar um processo Daemon
Date: Sun, 11 Feb 2001 11:09:07 -0000
User-agent: eGroups-EW/0.82

Para criar um daemon é necessário:
- duplicar o processo com fork() e terminar o processo pai;
- chamar a função setsid() para transformar o processo em processo 
líder da sessão;
- trocar o diretório atual usando a função chdir() para o diretório 
raiz ou para um diretório específico;
- mudar a máscara de criação de arquivos do processo para 0 usando a 
função umask();
- fechar todos os descritores de arquivos que não serão utilizados;

Estou mandando em anexo o programa C de daemon. Ele funciona no unix 
da HP (HP-UX), mas irá funcionar no linux e em outros unix.

Marcos

/*
 * Autor: Marcos Aurelio Pchek Laureano
 * Data.: 15/09/1999
 * Sistema: HP-UX
 */

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

/* necessarios para o daemon */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int daemon_init(void)
{
   pid_t iPid;
   long iMaxFd;
   int i;

   /* 1 passo - duplicar o processo utilizando fork */
   if((iPid = fork()) < 0)
      return -1;

   if( iPid != 0)
      exit(0);

   /* 2 passo - criar uma nova sessao */
   setsid();

   /* 3 passo - troca de diretorio */
   chdir("/");

   /* 4 passo - inicializa a mascara padrao */
   umask(0);

   /* 5 passo - fechar todos os descritores de arquivo */
   iMaxFd=sysconf(_SC_OPEN_MAX);
   for(i=0; i<iMaxFd; i++)
      close(i);

   return 0;
}

void main(int argc, char **argv)
{
   int i, iFd;
   if(daemon_init() < 0)
      exit(errno);

   /* criar um arquivo e de 3 em 3 segundos grava uma linha */
   iFd = open( "teste", O_CREAT | O_WRONLY, 0700);
   i=1;
   while(1)
   {
      sleep(3)
      write( iFd, i, sizeof(i));
   }
   exit(0);
}


--- In shell-script@y..., Anderson Montenegro <anderson.santos@c...> 
wrote:
> Me desculpa galera a pergunta foi muito mal formulada. Eu quero e 
criar um 
> daemon que e executado de 2 em 2s(um exemplo - em intervalos de 
tempo muito 
> pequenos)
> 
> ----- Mensagem original -----
> De:           Luciano Machado Granella [SMTP:971094@i...]
> Enviada em:           quinta-feira, 8 de fevereiro de 2001 15:39
> Para:         shell-script@y...
> Assunto:              Re: [shell-script] Como criar um processo
> 
> Sim, todo programa em execucao eh um processo. A funcao fork() cria 
outro
> processo. Todo processo em Unix eh criado dessa forma.
> Se voce quiser executar um processo/programa em background, eh isso 
mesmo.
> Quando vc quiser trazer este processo para a tela/janela novamente, 
use o
> comando "fg" que traz o processo para foreground.
>       [ ]s
>                               Luciano
> 
> __________________________________________________
> Luciano Machado Granella       Tel: (19) 3289-5563
> E-mails: granella@u...   UIN: 16900124
>          971094@i...
> 
> On Thu, 8 Feb 2001, Cid R Andrade wrote:
> 
> 
> ????????????????????????????????????????????????????????????????????
??  
> ?????????
> > Ei, todo programa e um  processo, ou nao e?
> > Se nao for, como funciona?
> >
> > Anderson, o que vc quer e que o programa rode em background? 
Entao digite 
> assim:
> >
> > NomedoPrograma &
> >
> > O & no final da linha coloca seu programa em background.
> >   ----- Original Message -----
> >   From: Anderson Montenegro
> >   To: seguranca@d...
> >   Cc: shell-script@y...
> >   Sent: Thursday, February 08, 2001 2:20 PM
> >   Subject: [shell-script] Como criar um processo
> >
> >
> >
> >
> >     Alguem ai sabe qual a funcao em c(linux) que cria um 
processo.Porque 
> eu
> >   queria transformar um programa em processo para deixa-lo 
rodando em
> >   standalone.
> >
> >         Yahoo! Groups Sponsor
> >
> >                     www.
> >
> >
> >
> >
> >   Sair da lista: address@hidden
> >   Banco Dados:   http://www.egroups.com/group/shell-script
> >
> >
> 
> 
> 
> Sair da lista: address@hidden
> Banco Dados:   http://www.egroups.com/group/shell-script


reply via email to

[Prev in Thread] Current Thread [Next in Thread]