ich möchte eine Art Taskmanager schreiben, der mehrere zu einem Programmpaket gehörende Programme startet und überwacht. Es soll möglich sein, Programme nach Beendigung oder Absturz automatisch neu zustarten und auch Programme über den Taskmanager zu beenden (über kill oder terminate-Signal).
Leider haben alle meine bisherigen Versuche nur zum Teil zum Erfolg geführt.
1. Versuch:
Programm mit start() starten.
Funktioniert, nur wird das Programm beim Schliessen nicht sauber beendet, es bleibt ein Zombie-Prozess laufen und der Prozess hat weiterhin den Status Running.
Die Signale funktionieren aber (kill oder terminate beenden das Programm), allerdings ebenfalls mit dem Nebeneffekt, dass der Zombie-Prozess bleibt.
2. Versuch:
Programm mit execute starten.
Funktioniert auch, das Programm wird auch korrekt und komplett beendet. Allerdings reagiert der Prozess nicht auf die Signale, die scheinen erst anzukommen, wenn das Programm dann beendet wird.
3. Versuch:
Programm mit startDetached starten.
Das Programm lässt sich starten, allerdings scheint hier die Statusabfrage nicht zu funktionieren. Zumindest erhalte ich kein Running zurück.
Mein Code-Abschnitt:
Code: Alles auswählen
do {
process->start(command);
process->waitForStarted();
while ( isRunning() ) {
}
mutex.lock();
if ( !restart ) {
endloop = true;
}
tmpLoop = endloop;
mutex.unlock();
} while ( !tmpLoop );
Die do-Schleife soll bei der Einstellung "automatischer Restart" bewirken, dass das Programm nach Beendigung automatisch neu gestartet wird (funktioniert auch).
isRunning ist eine Methode, die die Stati "Starting" und "Running" von QProcess prüft.
Ich hoffe, jemand kann mir hier mit dem entscheidenden Tipp helfen.
[edit]
hab noch was vergessen: ich benutze Qt4, das ganze muss sowohl unter Linux wie auch unter Windows laufen.
[/edit]
Gruß
Hubert