tutorials.de Buch-Aktion 05/2012
Seite 1 von 3 123 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
31
ZUGRIFFE
1747
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    deadline deadline ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Ort
    Regensburg [Bayern @ Mars]
    Beiträge
    167
    Hallo,
    mein Problem ist folgendes: Ich habe einen Windows Dienst, der über die Process Klasse verschiedene Konsolenprogramme startet. UseShellExecute ist aus (um die Ausgaben abzufangen).

    Wenn jetzt mein Programm unvorhergesehen abstürzt passiert folgendes:
    Mein Dienst ist beendet, die einzelnen Gast-Prozesse werden netterweise vom System übenommen und weitergeführt. Genau das führt aber zu Problemen, wenn der Dienst neugestartet wird. Dann sind noch die alten Programme da und die neuen kommen dazu.

    Kann man irgendwo einstellen, dass beim Beenden des Vater-Prozesses die Kinds-Prozesse mit geschlossen werden?

    Schonmal Danke im voraus.

    Grüße
    Christian
     
    PHP-Code:
    <?
    include("google.php");
    if (
    $schon_gesucht == false) {
    echo 
    "Erst einmal Google benutzen";
    exit;
    }
    ?>
    Meine Webseite: http://www.doktor-kurzschluss.de

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    Solltest du nicht eher verhindern, dass zum einen die Konsolenanwendungen abstürzen und wenn doch, diese nicht deinen Dienst in die Abgründe reisen?

    http://msdn.microsoft.com/de-de/libr...ss.exited.aspx
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    deadline deadline ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Ort
    Regensburg [Bayern @ Mars]
    Beiträge
    167
    Hallo,
    erstmal Danke für deine Antwort.
    Dieser Mechanismus ist bereits in meinem Programm implementiert. Mein Problem ist folgendes (vielleicht kam es nicht richtig rüber):
    Mein Dienst startet Kinds-Prozesse. Wenn jetzt, aus welchen Gründen auch immer der Dienst abstürzt (z. B. Prozess beenden im Taskmanager, unvorhergesehene Situationen usw.) muss er die Kinds-Prozesse mit in den Abgrund reißen.

    Beispiel an der Windows Konsole:
    Du startest über ein Batch-File ein Java Programm. Wenn man jetzt das Konsolenfenster schließt oder abschießt wird die zugehörige java.exe mit abgeschossen. Dieses Verhalten wünsch ich mir.

    Grüße
    Christian
     
    PHP-Code:
    <?
    include("google.php");
    if (
    $schon_gesucht == false) {
    echo 
    "Erst einmal Google benutzen";
    exit;
    }
    ?>
    Meine Webseite: http://www.doktor-kurzschluss.de

  4. #4
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi

    Das ist aber genau anders rum, wie du oben geschrieben hast

    Hast du probiert die OnStop-Methode zu überschreiben und das Thema da zu behandeln?
    Ggf. auch im Dispose-Event
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  5. #5
    deadline deadline ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Ort
    Regensburg [Bayern @ Mars]
    Beiträge
    167
    Ich bin der Meinung, dass meine beiden Posts das selbe aussagen.

    Wird denn das Dispose Event auch ausgelöst, wenn der Prozess hart beendet wird oder aus diversen Gründen abstürzt?

    Am liebsten wäre es mir, wenn es eine Einstellung gibt, mit der ich das gewünschte Verhalten erzwingen kann. Mit anderen Programmen gehts doch auch.
     
    PHP-Code:
    <?
    include("google.php");
    if (
    $schon_gesucht == false) {
    echo 
    "Erst einmal Google benutzen";
    exit;
    }
    ?>
    Meine Webseite: http://www.doktor-kurzschluss.de

  6. #6
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Andere Idee, wie wäre es wenn deine Programme in bestimmten Abständen prüfen ob der Dienst läuft (und/oder noch mit der gleichen Id läuft)?

    Wie es mit dem event aussieht weiß ich nicht aber wenn du ein eigenes IDisposable- Objekt erstellst und in einem using BLock verwendest sollte die Dispose Methode schon greifen.
    Aber das kann man ja auch schnell testen.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  7. #7
    deadline deadline ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Ort
    Regensburg [Bayern @ Mars]
    Beiträge
    167
    Diese Funktion ist auch schon implementiert. Aber mir ist was anderes eingefallen: Ich speicher mir die PIDs in meiner Ini Datei und beim nächsten Starten prüfe ich, ob sie noch laufen.
    Wobei, wenn dann die PID anderweitig vergeben wurde.

    Wie kann ich denn meine Prozesse identifizieren? Da es meistens Java Programme sind steht im Taskmanager nur "java.exe" und davon kann es ja durchaus mehrere geben.
     
    PHP-Code:
    <?
    include("google.php");
    if (
    $schon_gesucht == false) {
    echo 
    "Erst einmal Google benutzen";
    exit;
    }
    ?>
    Meine Webseite: http://www.doktor-kurzschluss.de

  8. #8
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Wenn ich dich richtig verstanden habe sind es alles deine Programme?
    Dann übergib einfach die PID mit beim start des Programmes und halt se im jeweiligem Programm direkt, ohne Datei.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  9. #9
    deadline deadline ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Ort
    Regensburg [Bayern @ Mars]
    Beiträge
    167
    Wenn alles meine Programme wären, würden sie nicht in Java geschrieben sein :P

    Wenn mein Programm abstürzt wird auch die PID aus dem RAM gelöscht.
     
    PHP-Code:
    <?
    include("google.php");
    if (
    $schon_gesucht == false) {
    echo 
    "Erst einmal Google benutzen";
    exit;
    }
    ?>
    Meine Webseite: http://www.doktor-kurzschluss.de

  10. #10
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Du solltest dein Programm dahingehend ändern, dass es einfach nicht mehr abstürzt. Das erscheint mir die beste Lösung.
     
    hihi = -h²

  11. #11
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Zitat Zitat von deadline Beitrag anzeigen
    Wenn alles meine Programme wären, würden sie nicht in Java geschrieben sein :P
    Aso, dachte jetzt java wäre eher ein Beispiel gewesen.
    Ich würde das mit dem using Block versuchen.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  12. #12
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Denke ich auch.

    Wenn du die Prozess-Instanz im Parent hälst und dieser wird beendet, wollten auch alle Sub-Prozesse mitgezoben werden.

    Wie startest du denn die anderen Prozesse?
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  13. #13
    deadline deadline ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Ort
    Regensburg [Bayern @ Mars]
    Beiträge
    167
    Also ich starte sie über die Klasse Process und lege dazu eine ProcessInfo an (Datei, Pfad usw.)
    UseShellExecute = false
    RedirectConsoleOut = true

    Ich vermute, dass ich dieses Verhalten irgendwie erzwingen kann (Setting o. Ä.) aber bisher hab ich nichts gefunden.
     
    PHP-Code:
    <?
    include("google.php");
    if (
    $schon_gesucht == false) {
    echo 
    "Erst einmal Google benutzen";
    exit;
    }
    ?>
    Meine Webseite: http://www.doktor-kurzschluss.de

  14. #14
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Ja, aber wie startest du? Legst du eine Prozess-Instanz an und ruft die Instanzmethode Start auf oder nutzt du die statische Methode Start?
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  15. #15
    deadline deadline ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Ort
    Regensburg [Bayern @ Mars]
    Beiträge
    167
    Für jeden Prozess, den ich starte instanziere ich ein neues Process Objekt.
     
    PHP-Code:
    <?
    include("google.php");
    if (
    $schon_gesucht == false) {
    echo 
    "Erst einmal Google benutzen";
    exit;
    }
    ?>
    Meine Webseite: http://www.doktor-kurzschluss.de

Ähnliche Themen

  1. mit programm prozess beenden
    Von fredlllll im Forum Visual Basic 6.0
    Antworten: 7
    Letzter Beitrag: 25.06.08, 07:08
  2. Prozess beenden
    Von MedRamBO im Forum Sonstige Sprachen
    Antworten: 13
    Letzter Beitrag: 07.11.07, 13:43
  3. Prozess beenden
    Von campari im Forum PHP
    Antworten: 6
    Letzter Beitrag: 20.01.07, 20:01
  4. Prozess beenden
    Von Impi2k im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 29.04.06, 15:27
  5. Prozess beenden
    Von flashgod im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 09.12.02, 16:41