Wie genau wird ein Prozess erzeugt?



  • Hi,

    ich würde gerne wissen wie genau man einen Prozess erzeugen kann.
    Der dann eine gewisse Zeit , beispielsweise mit Sleep(60); 60 Sek. lang läuft.

    Mein programm wartet im moment noch in einer einfachen Schleife auf ein ereigniss.Tritt dieses ereigniss ein , möchte ich mein programm wiederum eine Kette an kleinen Funktionen ausführen lassen.

    Ich habe hier z.B Fork in der gnu c Beschreuibung gefunden , und da alles bei mir unter Linux läuft würde ich gerne ein bischen etwas über die Syntax des befehls erfahren und Frage deshalb hier kurz mal nach.

    Lieben Dank für eure Hilfe

    Michael



  • sehe ich das richtig, du forkst, laesst das parent sterben und das child wartet 60 sekunden, tut was und forkt wieder? ich hoffe nicht...

    welches OS? prozesse gehoeren nicht zur c sprache, sondern sind OS-spezifisch.



  • OS ist Linux, steht da 😃

    @michi:
    fork() teilt einfach den aktuellen Prozess entzwei. Offene Dateien werden zwischen den Prozessen geteilt, der Speicher wird dupliziert (das ist _kein_ Threading). fork() kehrt also zweimal (und das ist sein Geheimnis) zum aufrufenden Programm zurück, einmal mit Returncode 0 und einmal mit einer PID. Einfaches Beispiel:

    pid_t pid = fork();
    switch (pid) {
    case -1:
      printf("Fehler %s!\n", strerror(errno));
      break;
    
    case 0: /* Hier läuft der aufrufende Prozess her */
      wait(); /* Wartet, dass der Fork sich beendet */
      break;
    
    default: /* Hier läuft der geforkte Prozess her */
      sleep(60);
      exit(0); /* <- wichtig, sonst läuft der geforkte Prozess so weiter wie der 
                * aufrufende, dann läuft Dein Programm zweimal */
    }
    

    Idealerweise würde man natürlich in dem Unterprogramm etwas sinnvolles machen und im Hauptprogramm ab und zu prüfen ob der Prozess sich beendet hat (Stichwort waitpid)



  • Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten