Execl will nicht starten.



  • OK, ich habs schon mit system ...


  • Mod

    bluepeople12 schrieb:

    OK, ich habs schon mit system ...

    Ähh, was hast du überhaupt vor?



  • Ich hab hier eine Liste an Dateien (Textdateien). In ihnen soll was gesucht werden und dies soll angezeigt werden.

    Dass die Dateien existieren, ist garantiert. Dass da was drin ist, auch.
    Und mit dem C++-Befehl system will ich grep starten, sodass mein Prozess nicht beendet wird ... sondern mehrfach, da ich ja jede Datei mit grep starten möchte und nach bestimmten Suchwörtern suche.

    Das hab ich vor ...
    Ist da was falsch dran?



  • bluepeople12 schrieb:

    Und mit welchem Befehl starte ich einfach einen neuen Prozess ohne ihn zu beenden ?

    fork

    edit: "ohne ihn zu beenden" ist natürlich Quark, bei exec wird nichts beendet, sondern ersetzt. Der übliche Weg, ein anderes Programm als Unterprozess zu starten, besteht in einer Kombination aus fork und exec: Erst fork, um einen Kindprozess abzuspalten. Dann im Kindprozess exec.

    (oder system)



  • Ist system schlecht dafür ? Ich mein, bei mir funktionierts ...



  • exec* überschreibt den aktuellen Prozess mit einem neuen Prozess. Wie Bashar bereits gesagt hast, musst du daher vorher einen neuen Prozess anlegen. Das geht mit man: fork bzw. man: vfork.

    pid_t pid = vfork();
    if(pid == -1) {
      perror("vfork");
      return 1;
    }
    else if(pid == 0) { // Neuer Prozess
      if(execlp(...) == -1) {
        perror("execlp");
      }
      _exit(1);
    }
    else {
      int status;
      if(waitpid(pid, &status, 0) == -1) {
        perror("waitpid");
        return 1;
      }
      if(WEXITSTATUS(status) != 0) { // Prozess hat mit einem Fehler beendet.
        // ...
      }
    }
    

Anmelden zum Antworten