[C] Threads / Programm im Hintergrund lassen

fish-guts

Erfahrenes Mitglied
Guten Morgen

Nachdem ich nach langer Suche nichts gefunden habe, wende ich mich mal wieder an euch :)

Ich schreibe gerade einen kleinen Server (als Übung), gleich nachdem start geht er in eine Endlosschleife und wartet auf Befehle.

Der Server wird über die Konsole gestartet.

Code:
int main(int argc,char **argv)
{
    if(strcmp(argv[1],"start")==0) // startet den server
    {
        mainsock = -1;
        int rc;
        if((rc=rms_load())!=0) // lädt die Schleife
        {
            if(rc!=LOAD_OK)
                rms_cput(APP_ERR_LOADINGFAILED,rc);
            exit(EXIT_FAILURE);
        }
        return 0;
    }
    else if(strcmp(argv[1],"stop")==0) // stoppt den server
        exit(EXIT_SUCCESS);
    else
    {
        printf(APP_DBG_UNKNOWN_CMD);
        exit(EXIT_FAILURE);
    }
    return -1;
}
Die Bedingungen für den korrekten Aufruf sind alle gegeben.

Zum Problem:

Wenn ich das Programm über die Konsole aufrufe, bleibt der Prozess in der Konsole am laufen und hört erst dann auf, wenn ich das Programm beende,

Ich möchte aber, dass der Server im Hintergrund läuft, sodass ich das Konsolenfenster schliessen, bzw. für anderes verwenden kann.

Die Suche hier im Forum hat leider nur sehr Windows-lastiges Material ergeben.

Hat jemand einen Tipp dafür?

OS: Ubuntu Linux 8.04 (hardy)
IDE: Eclipse CDT 3.2.2


Vielen Dank schon im Voraus.


Gruss

FG
 
Hallo,

da gibts 2 Möglichkeiten:
Entweder du startest dein Programm einfach im Hintergrund ala
Code:
./program &
oder du erstellst ein Kindprozess und lässt ihn verwaisen so das er ein Daemon wird.

Gruß,
RedWing
 
Moin

Zweiteres klingt schon eher nach dem, was ich vor habe.

Welche Befehle muss ich mich dafür anschauen?

Gruss

FG
 
Normalerweise funktioniert das so das man einen fork macht also ein neues Kind welches dann deinen Server laufen lässt. Der Elternprozess beendet sich dann vorzeitig so das direkt der init Prozess der neue Vater deines Kindprozesses wird. Praktisch gesehen muss man da noch eine Reihe von Dingen beachten. Schau mal da:
http://www-theorie.physik.unizh.ch/~dpotter/howto/daemonize

Gruß,
RedWing
 
Hab gerade gesehen: Alternativ gibts in Linux auch eine Funktion namens daemon die denk ich mal genau diese Aufgabe übernimmt:

Code:
man daemon

Gruß,
RedWing
 
Moin

Super, dankeschön. Schaue mir das mal an.

Ich markeire den Thread mal als erledigt. Wenn sich noch Fragen ergeben sollten, melde ich mich wieder.

Danke und Gruss

FG
 
Zurück