String bricht Daemon Prozess ab



  • Hallo, ich bin neu hier im Forum, ich hab wie schon gesagt bei einem Consolenprogramm von mir als Deamon laufen, aba sobalt ich versuch eine Stringverkettung einzubauen bricht der Deamon von alleine ab.

    ///////////////////////////////////////////////////////////////////////////////
    void start_daemon(char *log_name, int facility);
    ///////////////////////////////////////////////////////////////////////////////
    
    int main(int argc, char **argv)
    {
    
        start_daemon("SERWACH", LOG_USER);
        time_t rawtime;
        seconds = time (NULL);
        string sstr;
        sstr = "mv /var/log/serwach/date_.log /var/log/serwach/archive/date_" + seconds; //wenn diese zeile raus ist funtzt alles
    
        system("mv /var/log/serwach/date_.log /var/log/serwach/archive/date_.log");
    
         return 0;
    }
    ///////////////////////////////////////////////////////////////////////////////
    void start_daemon(char *log_name, int facility)
    {
        int i;
        pid_t pid;
                    //Elternprozeß beenden, somit haben wir einen Waisen dessen sie jetzt vorerst init annimmt
        if((pid = fork()) != CHILD) {exit(0);}                   //Kindprozess wird zum Session-Führer. Mißlingt dies,k ann der Fehler daran liegen das der Prozeß bereits Sessionführer ist
    
        if(setsid() == ERROR){
            fprintf(stderr, "%s kann nicht Session-Führer werden!\n",log_name);
            exit(0);
        }
                                                    // Gründe für das Root-Wurzelverzeichnis:   - core-Datei wird im aktuellen Arbeitsverzeichnis hinterlegt
                                                    //                                          -Damit bei Beendigung mit umount das Dateisystem sicher abgehängt werde kann
        chdir("/");
        //unmask(0);                                                                          //Damit wir nicht die Bitmaske vom Elternprozeß erben bzw. diese bleiben, stellen wir diese auf 0
        for(i=sysconf(_SC_OPEN_MAX); i>0; i--){close(i);}                                   //Wir schließen alle geöffneten Filedeskriptoren....
        openlog(log_name, LOG_PID, facility);                                               //Da Dämonprozeß selbst kein Terminal für die Ausgabe hat
    }
    

    Das brauch ich, weil ich system() dynamisch gestalten möchte.



  • Lass dir doch deinen "zusammengebauten" String mal ausgeben. Und dann denk darüber nach, was passiert, wenn du zu einem Zeichenkettenliteral einen Integer addierst 😉



  • Oh man danke, 🙄 zuviel perl in letzter Zeit.
    Da hätte ich noch Wochen sitzen können ohne das was raus kommt.


Anmelden zum Antworten