[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