wie bekomm ich mein prog dazu das es als daemon läuft



  • hey,

    schreib grad n kleines terminal prog, so client-server mäßig, und wollt ma frage ob vielleicht jemand weiß wie ich es als daemon laufen lassen kann.

    so das es quasi im hintergrund läuft. gibts da n befehl unter linux, oder muß ich erst die process id herausfinden und das dann mit kill in den hintergrund schicken?

    danke schon mal im *******....



  • Am einfachsten gehts wohl, wenn du das Programm via ./programmname & startest. Dann geht es von alleine in den Hintergrund.

    Ansonsten kenn ich mich mit Daemonprogrammierung noch nicht wirklich aus 😉

    gruss, s.



  • @sky
    Dann sollte man schon besser nohup verwenden, denn sonst laeuft das Prg, zwar im Hintergrund, terminiert aber beim ausloggen.

    @bash
    Um auf der ganz sicheren seite zu sein, schickst Du Dein Programm wie folgt in dem Daemon mode:

    1. fork() aufrufen und den Parent beenden. Dann laeuft nur der Client. unabh. vom parent

    2. chdir nach / machen, um dagegen gefeit zu sein, dass dir jemand das Verzeichnis unter den Fuessen wegzieht. Oder in ein Verzeichnis wechseln, bei dem Du dir sicher bist, dass dies nicht ein Problem wird.

    3. setsid aufrufen, wodurch eine neue Session erzeugt wird, der demon processgroup leader wird und losgekoppelt wird von jedem kontrollierendem terminal.

    4. Ich wuerde noch ein fork machen, abermals den Parent exiten, weil dadurch garantiert wird, dass der demon nicht mehr session leader ist,
    (nicht auf allen Platformen arforderlich).

    Es gibt mithin viele, die sich mit einem Fork (also nur schritt 1) zurfrieden geben, allerdings ist dies eine pot. Sicherheitsluecke, weil man dann noch rein theoretisch ueber die session einfluss auf den Demon nehmen kann.



  • @virtual:
    hey danke, so etwas in der art hab ich gesucht, ich probier das ganze mal aus, pack das in ne function(), setz sie möglichst weit nach vorn und dann funzt das schon (ansonsten gibts da ja noch man-pages).

    danke für die anregung, habt ja ein nettes forum hier, sollt ich öfter mal vorbeischaun...

    thanx...



  • @virtual

    ich bin übrigenz über ne function gestolpert die das programm automatisch in den daemon mode versetzt.
    mit dem passenden aufruf:

    daemon(1,1);

    falls ma wieder jemand das problem hat.



  • int main()
    {
    
    if (daemon(0,0) < 0)
        {
        perror("daemon");
        exit(2);
        }
    // Ab hier ist es ein daemon
        openlog("FREELINE", LOG_PID, LOG_DAEMON);
    
    process();
    return 0;
    }
    
      int daemon(int nochdir, int noclose)
         {
             int i=0;
             switch (fork())
             {
                 case 0:  break;
                 case -1: return -1;
                 default: _exit(0);          /* exit the original process */
             }
    
             if (setsid() < 0)               /* shoudn't fail */
               return -1;
    
             /* dyke out this switch if you want to acquire a control tty in */
             /* the future -- not normally advisable for daemons */
    
             switch (fork())
             {
                 case 0:  break;
                 case -1: return -1;
                 default: _exit(0);
             }
    
             if (!nochdir)
               chdir("/");
    
             if (!noclose)
             {
                 for(;i<255;++i)
                    close(i);
                 open("/dev/null",O_RDWR);
                 dup(0); dup(0);
             }
    
             return 0;
         }
    

    [edit]closeall ersetzt[/edit]

    [ Dieser Beitrag wurde am 26.08.2002 um 11:41 Uhr von kingruedi editiert. ]



  • @bash. Die kannte ich auch noch nicht ;), danke


Anmelden zum Antworten