Herausfinden ob ein externes Programm schon gestartet ist?

Thallius

Top Contributor
Hi,

ich möchte für meine Applikation eine automatische Backup-Funktion erstellen. Das ganze soll so aussehen, dass der User in der App nur einen Pfad für das Backup eingiebt und die App selber dann in regelmäßigen Abstängen ein Backup in diesem Verzeichnis erstellt.

Um das möglichst kompfortabel zu gestallten dachte ich, es wäre sinnvoll die Backup-Funktion in ein eigenes Programm auszulagern, welches von meiner Applikation gestartet wird. Dadurch könnte das Backup auch weiterlaufen, wenn der User die Haupt-Applikaton bereits wieder beendet hat. Das Backup würde einfach im Hintergrund gemacht werden.

Zusätzlich dazu soll der User aber auch die Möglichkeit haben, dass Backup von Hand anzustoßen. Also gibt es in den Settings einen Button "Backup jetzt erstellen".

Wie mache ich es jetzt am schönsten, dass ein mehrfaches Klicken auf diesen Button nicht mehrere Backup-Apps startet?

Klar, ich könnte zum Beispiel von der Backup-App eine Envirement-Variable setzen solange die App läuft. Oder ich könnte irgendwo eine Datei schreiben (In der könnte ich dann sogar Informationen speichern die die Haupt-App auswerten kann) und diese nach Beendigung des Backup-Vorgangs wieder löschen.
Denkbar wäre auch herauszufinden ob ein Task mit diesem Appnamen schon läuft.

Was meint Ihr wie löst man so eine Interprocess-Kommunication am schönsten?

Gruß

Claus
 

arilou

Bekanntes Mitglied
Hört sich an, als ob das "Backup-Programm" eigentlich ein daemon/Service ist.
Und das "Front-End" schickt dem Daemon Aufträge oder holt sich Informationen.
Der daemon kann aber auch anderweitig (z.B. nach einem Zeitplan) aktiv werden o.ä.

Ach ja - für das Prüfen "läuft der daemon schon?" sowie die Kommunikation mit einem daemon, gibt's fertige Vorgehensweisen/Bibliotheken.
 
Zuletzt bearbeitet:

Thallius

Top Contributor
Also wenn ich einen Daemon Thread richtig verstanden habe, dann wird dieser auch beendet wenn die Haupt-Aplikation beendet wird. Das ist aber genau das was ich nicht will. Ich denke was ich meine ist dann wohl eher ein Service

Gruß

Claus
 

chalkbag

Bekanntes Mitglied
Eine leichte und zuverlässige Lösung wäre für mich hier ein Filelook mittels Java Nio zu erstellen.
Wenn das Lock vergeben ist, dann läuft der Backup-Prozess. Auch bei einen Absturz wird das Lock automatisch freigegeben.

Service etc. wären natürlich schöner, aber wohl auch System-abhängig und aufwändiger zur Umsetzung?
 

Joose

Top Contributor
Mittels Dateilock könnte man sowas realisieren.

Sprich deine Backup Programm startet und prüft eine "fixe Datei" ob diese existiert.
Wenn nein -> alles klar keine Instanz des Backup Programm läuft
Wenn ja -> prüfen ob die Datei gelockt ist
Wenn nein -> alles klar keine Instanz des Backup Programm läuft
Wenn ja -> nicht starten da eine Instanz läuft.
Und sollte eben keine Instanz laufen erstellt dein Programm diese eine Datei und greift zu damit die Datei gelockt wird.


So etwas haben wir für Kundenprojekt gebraucht und es ist ohne Probleme in der Produktion im Einsatz. (Wir haben das allerdings in C# geschrieben, was aber keinen großen Unterschied machen sollte)

EDIT: war chalkbag etwas schneller ;)
 
Zuletzt bearbeitet:

Thallius

Top Contributor
Nach gut zwei Stunden recherche glaube ich auch, dass ein File die effektivste Lösung für mein Problem ist.

Ich habe mir jetzt einen eigenen Listener geschrieben, der im Sekundentakt eine Datei pollt, welche von der Backup-Applikation erzeugt, beschrieben und gelöscht wird. Die Backup-Applikation schreib in diese Datei jede Sekunde den aktuellen Status (Wie weit sie fortgeschritten ist) und löscht sie am Ende.
Wird der Backup-Pfad in der Haupt-Applikation geändert, dann löscht die App die Datei und die Backup-App bricht dann das Backup ab.
Wird eine existierende Datei nicht einmal in 10 Sekunden modifiziert, dann gehe ich davon aus, dass die Backup-Applikation abgesürzt ist bevor sie die Datei löschen konnte und ich erledige das aus der Haupt-Applikation heraus und starte das Backup neu.

Ich denke so habe ich an alles gedacht oder?

Gruß

Claus
 

chalkbag

Bekanntes Mitglied
Klingt ok, obwohl pollen ja eher nicht so schön ist.
Darfst du Java 7 nicht verwenden? Mit Java Nio wäre die Thematik einfacher erschlagen.
 
Zuletzt bearbeitet:

chalkbag

Bekanntes Mitglied
Ich habe mit Nio nur das Filelock verwendet. Das Lock wurde immer freigegeben, auch wenn ich den Prozess, die VM oder das System abschieße. Einziges Problem ist, dass die Datei dann nicht gelöscht wird (dass muss man manuell machen). Aber bei einer leeren Datei ist das nicht so schlimm, besonders wenn es nur eine ist.
Probleme bzgl. Dateiänderungen hatte ich bis jetzt noch nicht, hat mir vielleicht aber bis jetzt auch der Anwendungsfall gefehlt.

Grüße
 

arilou

Bekanntes Mitglied
Also wenn ich einen Daemon Thread richtig verstanden habe, dann wird dieser auch beendet wenn die Haupt-Aplikation beendet wird. Das ist aber genau das was ich nicht will. Ich denke was ich meine ist dann wohl eher ein Service

Ich habe nicht von einem "Daemon Thread", sondern von einem daemon gesprochen.
Hängt halt davon ab, ob du unter Unix oder Windoof arbeitest.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Wie kann man herausfinden, wo der Wert herkommt ? Allgemeine Java-Themen 13
J (Effektives) Arbeitverzeichnis herausfinden Allgemeine Java-Themen 5
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
M Kameradaten bzw. Einstellungen herausfinden Allgemeine Java-Themen 9
P Herausfinden, ob ein Process ein Fenster hat Allgemeine Java-Themen 1
D Type herausfinden Allgemeine Java-Themen 15
M System herausfinden Allgemeine Java-Themen 6
J Aktuellen Prozess herausfinden. Allgemeine Java-Themen 3
F Herausfinden ob nur 1 oder 0 in einem String ist. Allgemeine Java-Themen 4
C Objekt Typ herausfinden Allgemeine Java-Themen 5
E Benötigte Klassen herausfinden Allgemeine Java-Themen 11
B bereits gelesene Bytes herausfinden Allgemeine Java-Themen 10
Zettelkasten Aus String bestimmtes Zeichen herausfinden Allgemeine Java-Themen 19
E Standort des Programms herausfinden Allgemeine Java-Themen 4
V Calendar monatstage herausfinden? Allgemeine Java-Themen 2
M Username herausfinden? Allgemeine Java-Themen 2
Bloodredangel Zeitstempel von Dateien in Archiven herausfinden Allgemeine Java-Themen 2
H Decmal-Trenner, wie herausfinden Allgemeine Java-Themen 3
P Textfile Encoding herausfinden Allgemeine Java-Themen 2
B Herausfinden ob Datum existiert Allgemeine Java-Themen 2
G Globalen Programm-Ordner herausfinden Allgemeine Java-Themen 7
S Innerer Type einer generischen Collection herausfinden? Allgemeine Java-Themen 13
oltoko PID für das laufende Java Programm herausfinden Allgemeine Java-Themen 3
G Wildcards - Methoden herausfinden. Allgemeine Java-Themen 7
D Benutzerrechte herausfinden Allgemeine Java-Themen 3
G System32 Folder herausfinden Allgemeine Java-Themen 5
D Herstelldatum eine Datei herausfinden Allgemeine Java-Themen 7
U Benutzer herausfinden Allgemeine Java-Themen 3
E Frequenz des Monitors herausfinden Allgemeine Java-Themen 12
Q Aktuelles Verzeichniss herausfinden. Allgemeine Java-Themen 2
V oberste klasse herausfinden. Allgemeine Java-Themen 21
P Java JRE herausfinden Allgemeine Java-Themen 2
G Standard-Browser herausfinden Allgemeine Java-Themen 4
W Herausfinden, wo das Programm liegt. Allgemeine Java-Themen 8
J Document_Root des Webordners herausfinden Allgemeine Java-Themen 2
F Parameter Name herausfinden Allgemeine Java-Themen 25
T aus .cda File Titel und Sänger herausfinden Allgemeine Java-Themen 6
T angemeldeten usernamen herausfinden Allgemeine Java-Themen 4
C Java-Version herausfinden Allgemeine Java-Themen 9
R Geschwindigkeit herausfinden Allgemeine Java-Themen 2
G Speicherauslastung herausfinden Allgemeine Java-Themen 6
O Maven ein externes jar laden ohne die Applikation neu zu kompilieren Allgemeine Java-Themen 4
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
H Externes Programm, Parameter Allgemeine Java-Themen 6
S externes Mehrweg-Mischen Allgemeine Java-Themen 3
T Externes Programm auf anderem Bildschirm starten Allgemeine Java-Themen 3
F Externes Programm starten, Speicheraufwändig Allgemeine Java-Themen 7
cedi int Zahl in ein ASCII zeichen umwandeln und dieses in ein externes Textfenster schreiben Allgemeine Java-Themen 6
E Externes bat sichtbar ausführen Allgemeine Java-Themen 4
M in Abhänigkeit vom FileFilter, externes Programm ausführen Allgemeine Java-Themen 12
F externes Programm beginnt erst nach dem ende des mainprogrammes Allgemeine Java-Themen 3
H Externes Programm in JAR einbinden Allgemeine Java-Themen 11
X Aus Java Applikation externes Programm starten Allgemeine Java-Themen 3
N Externes Programm steuern Allgemeine Java-Themen 12
L Externes Bash Script aus Java Datei heraus starten Allgemeine Java-Themen 2
J Externes Programm - Konsolenausgabe kopieren/sichtbar machen Allgemeine Java-Themen 22
J Externes Programm starten und stoppen (Linux) Allgemeine Java-Themen 3
B Externes Programm starten - Konsolenausgabe anzeigen lassen? Allgemeine Java-Themen 2
P Externes Programm starten und beeinflussen Allgemeine Java-Themen 11
S externes programm Allgemeine Java-Themen 6
padde479 Externes Programm starten Allgemeine Java-Themen 7
C externes Programm läuft erst nach schließen des mainprogramm Allgemeine Java-Themen 7
T Mit java externes Programm starten Allgemeine Java-Themen 4
W Externes Programm beenden mit eigenem Programm beenden Allgemeine Java-Themen 7
M Externes Programm ausführen Allgemeine Java-Themen 2
N externes Sortieren (MergeSort Allgemeine Java-Themen 2
M externes Programm aus Java heraus starten Allgemeine Java-Themen 2
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
districon Programm zum Durchsuchen von (Ebay-)Artikeln Allgemeine Java-Themen 1
T Addons im eigenen Programm Allgemeine Java-Themen 1
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
D Programm designen Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
S Nachrichten Filter Programm Allgemeine Java-Themen 14
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
Lukas2904 Swing Anzeigen lassen das das Programm geschlossen wurde Allgemeine Java-Themen 3
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
R Lesen von Interfaces (Programm Vervollständigen) Allgemeine Java-Themen 10
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
OSchriever Linux-Programm öffnen Allgemeine Java-Themen 6
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
L Eclipse Konsole im exportierten Programm Allgemeine Java-Themen 2
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20

Ähnliche Java Themen

Neue Themen


Oben