Anzeige:
Ergebnis 1 bis 2 von 2

Thema: Ausführung einer Anwendung abbrechen

  1. #1
    Registrierter Benutzer
    Registriert seit
    19.07.2004
    Beiträge
    50

    Ausführung einer Anwendung abbrechen

    Hallo,

    ich möchte von meinem Programm aus eine Anwendung starten, und diese dann bei Bedarf abbrechen können.
    Also z.B. habe ich einmal mein Programm, das Eingaben vom Benutzer einliest, und einmal ein externes Programm, welches meinetwegen Daten von /dev/zero nach /tmp/nullen kopiert. Nun möchte ich bei meinem Programm vom Benutzer z.B. "los" eingeben lassen. Das externe Programm wird gestartet und kopiert schön. Wenn der Benutzer dann "stop" eingibt, soll das Programm wieder beendet werden.
    So weit, so schön. Relativ einfach, Programm wird im Hintergrund gestartet ("/bin/programm &"), PID wird in einer Datei gespeichert, und wenn der Benutzer "stop" eingibt, wird die PID wieder ausgelesen und es gibt ein "kill PID".
    Jetzt ist aber das Problem, dass der Benutzer auch "los 1000" eingeben können soll. Das Programm wird dann entweder beendet, wenn der Benutzer wieder "stop" eingibt, oder aber wenn 1000 Bytes (z.B.) kopiert wurden. Das mit "stop" ist ja schon geklärt, nur jetzt habe ich ein Problem:
    Wie kann ich elegant (darauf kommts an ) herausfinden, dass ein Programm (welches im Hintergrund, also mit "&", ausgeführt wird) wieder beendet wurde? Klar kann ich in Abständen "ps" auswerten, aber das zähle ich nicht unbedingt zu elegant. Eine weitere Möglichkeit wäre das Erstellen und Löschen irgendwelcher Dateien, woran ich erkennen kann, ob das Programm läuft, aber das finde ich auch nicht wirklich schön.

    Also, Ideen?

    Danke schonmal

  2. #2
    Registrierter Benutzer
    Registriert seit
    20.07.2000
    Ort
    Österreich
    Beiträge
    189
    ich würde das ganze mit 2 prozessen lösen.

    d.h. im "hauptprgramm" einen fork() machen, und im kindprozess das 2. programm starten (mit exec()). dann hast du im hauptprogramm schon mal die pid des kindes, und musst nicht mehr mit dateien herum spielen.

    mit wait3() kannst du kontrollieren ob der prozess schon beendet wurde, falls nicht kannst du ihn mit kill() das entsprechende signal schicken.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •