[c] demon linux

0

czy ktoś pisal/posiada materiały na temat jak napisać demona w c
przez demona rozumie ze program po uruchomieniu zaczyna pracować w tle...

0

daemon - sprawdz dokladnie co robi, to samo (albo wiecej mozna uzyskac ...

fork();
chdir("/");
setsid();
close(0); // fclose(stdin);
close(1); // fclose(stdout);
close(2); // fclose(stderr);
1

Kiedyś gdzieś w internecie znalazłem taką procedurę do demonizowania:

void Daemonize()
{
    int i,lfp;
    char str[10];
    char* LOCK_FILE = "AGate.lock";

    if(getppid()==1) return; /* already a daemon */
    i=fork();
    if (i<0) exit(1); /* fork error */
    if (i>0) exit(0); /* parent exits */
    /* child (daemon) continues */
    setsid(); /* obtain a new process group */
    for (i=getdtablesize();i>=0;--i) close(i); /* close all descriptors */
    i=open("/dev/null",O_RDWR); dup(i); dup(i); /* handle standart I/O */
    umask(027); /* set newly created file permissions */
    chdir("/tmp"); /* change running directory */
    lfp=open(LOCK_FILE,O_RDWR|O_CREAT,0640);
    if (lfp<0) exit(1); /* can not open */
    if (lockf(lfp,F_TLOCK,0)<0) exit(0); /* can not lock */
    /* first instance continues */
    sprintf(str,"%d\n",getpid());
    write(lfp,str,strlen(str)); /* record pid to lockfile */
    signal(SIGCHLD,SIG_IGN); /* ignore child */
    signal(SIGTSTP,SIG_IGN); /* ignore tty signals */
    signal(SIGTTOU,SIG_IGN);
    signal(SIGTTIN,SIG_IGN);
    signal(SIGHUP, SignalHandler); /* catch hangup signal */
    signal(SIGTERM, SignalHandler); /* catch kill signal */
}
0

dziekuje za wszystkie odpowiedzi chetnie potestuje a pÓzniej podziele sie wrazeniami :]

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0