Herausfinden ob ein externes Programm schon gestartet ist?

Thallius

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
 
A

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

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
 
C

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?
 
J

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

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
 
C

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:
Thallius

Thallius

Top Contributor
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.

Ich habe gelesen, dass gerade das überwachen von Dateiänderungen mit NIO nicht wirklich gut funktionieren soll.

Ist das mitlerweile nicht mehr so?

Gruß

Claus
 
C

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
 
A

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.
 
Thallius

Thallius

Top Contributor
Nunja, eigentlich unter OSX ;) aber es muss nachher sowieso auf allen drei Plattformen laufen.

Gruß

Claus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
P 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
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
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
S Einfaches Programm programmieren Allgemeine Java-Themen 5
M kleines KI Programm Idee Allgemeine Java-Themen 7
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
N Programm startet nicht, nur per cmd Allgemeine Java-Themen 5
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
R Programm zur Rekursion Allgemeine Java-Themen 5
N Quicksort Programm hängt sich auf Allgemeine Java-Themen 6
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
dereki2000 Programm veröffentlichen Allgemeine Java-Themen 14
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
kodela Programm hängt in der Ereigniswarteschlange Allgemeine Java-Themen 13
A Java Programm verbessern/vereinfachen Allgemeine Java-Themen 20
P Programm darf nicht mehrfach startbar sein Allgemeine Java-Themen 16

Ähnliche Java Themen

Anzeige

Neue Themen


Oben