Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)
Ich bräuchte einen Gedankenanstoss, ich habe für den RasPi (Rasbian) eine Konsolenanwendung erstellt und möchte verhindern das die Applikation ein zweites mal ausgeführt wird, da ansonsten HWResourcen ein zweites mal verwendet werden.
Die Verwendung der SimpleIPC Lösung scheidet IMHO aus, da es keine GUI gibt (Type Console Application) und somit nichts verwendet werden kann, das vom Typ TComponent abgeleitet ist. Eine einfache Variante mit Lockfile scheidet meiner Meinung nach auch aus, da bei einem Kill die Datei ja nicht gelöscht wird und somit wieder nicht klar ist, ob das Programm noch läuft.
Wie kann ich es verhindern bzw. in Erfahrung bringen ob das Programm bereits gestartet ist und läuft ?
Andreas
Die Verwendung der SimpleIPC Lösung scheidet IMHO aus, da es keine GUI gibt (Type Console Application) und somit nichts verwendet werden kann, das vom Typ TComponent abgeleitet ist. Eine einfache Variante mit Lockfile scheidet meiner Meinung nach auch aus, da bei einem Kill die Datei ja nicht gelöscht wird und somit wieder nicht klar ist, ob das Programm noch läuft.
Wie kann ich es verhindern bzw. in Erfahrung bringen ob das Programm bereits gestartet ist und läuft ?
Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 308
- Registriert: Do 9. Apr 2009, 10:10
- OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4)
- CPU-Target: 32Bit
- Wohnort: 785..
Re: Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)
Extern über ps -A nachschauen, ob das Programm schon läuft ist jetzt bestimmt nicht die gesuchte Antwort, wenngleich es die Frage evtl. richtig beantworten könnte ?
Ubuntu 9.10 (L 0.9.28 FPC 2.4.x)
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)
TComponent bedingt keine GUI.af0815 hat geschrieben: Die Verwendung der SimpleIPC Lösung scheidet IMHO aus, da es keine GUI gibt (Type Console Application) und somit nichts verwendet werden kann, das vom Typ TComponent abgeleitet ist.
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)
In ein Lockfile kann man auch eine Prozess-ID schreiben.af0815 hat geschrieben:Eine einfache Variante mit Lockfile scheidet meiner Meinung nach auch aus, da bei einem Kill die Datei ja nicht gelöscht wird und somit wieder nicht klar ist, ob das Programm noch läuft.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)
Danke für die Rückmeldungen.
Es wird vermutlich eine Lockfilevariante mit der aktuellen ProzessID werden, die dann beim Start kontrolliert wird. Da brauch ich das ps -A dann auch noch
Andreas
Es wird vermutlich eine Lockfilevariante mit der aktuellen ProzessID werden, die dann beim Start kontrolliert wird. Da brauch ich das ps -A dann auch noch

Irgendwo sind da aber bindings zu einen widgetset hineingerutscht. Ich will da jetzt nicht tiefer gehen.mse hat geschrieben:TComponent bedingt keine GUI.af0815 hat geschrieben: Die Verwendung der SimpleIPC Lösung scheidet IMHO aus, da es keine GUI gibt (Type Console Application) und somit nichts verwendet werden kann, das vom Typ TComponent abgeleitet ist.
Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)
Hm, das ist eigentlich nicht möglich, da SimpleIPC Teil von der FCL ist. Die dürfte nicht Widget-abhängig sein.af0815 hat geschrieben:Irgendwo sind da aber bindings zu einen widgetset hineingerutscht. Ich will da jetzt nicht tiefer gehen.mse hat geschrieben:TComponent bedingt keine GUI.af0815 hat geschrieben: Die Verwendung der SimpleIPC Lösung scheidet IMHO aus, da es keine GUI gibt (Type Console Application) und somit nichts verwendet werden kann, das vom Typ TComponent abgeleitet ist.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)
Aber was wenn das Programm oder der Raspi abstürzt? Dann hast Du ein Lockfile, aber kein laufendes Programm - und kannst auch kein Neues starten.
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)
Das SimpleIPC benötigt zusätzlich noch einiges, damit wrid das Programm unnötig aufgebläht, nur für das, das ich wissen will ob es nur einmal gestartet wurde ist mir das zuviel Aufwand. Deswegen suche ich auch nicht mehr nach, wo ich mir da die Abhängigkeiten eingefangen habe.
Die anderen Ideen schau ich mir mal an, vor allen weil das Programm sowieso ein Lockfile (mit einer PID) durch die serielle Schnittstelle erzwingt. Somit werde ich nach dem Lockfile sehen, die ID auslesen und kontrollieren ob es ein gültiger Prozess ist. Wenn ja, so werde ich mein Programm beenden. Sieht einfach und sinnvoll aus.
Wegen dem Absturz - deswegen sehe ich dann nach ob es einen aktiven Prozess mit der PID im Lockfile gibt. Gibt es keinen ist das Lockfile ganz einfach nicht mehr gültig. Minicom macht es auch so - Gibt eine kurze Warbung aus, das es ein nicht mehr gültiges Lockfile gibt und erzeugt dann ein neues.
Andreas
Die anderen Ideen schau ich mir mal an, vor allen weil das Programm sowieso ein Lockfile (mit einer PID) durch die serielle Schnittstelle erzwingt. Somit werde ich nach dem Lockfile sehen, die ID auslesen und kontrollieren ob es ein gültiger Prozess ist. Wenn ja, so werde ich mein Programm beenden. Sieht einfach und sinnvoll aus.
Wegen dem Absturz - deswegen sehe ich dann nach ob es einen aktiven Prozess mit der PID im Lockfile gibt. Gibt es keinen ist das Lockfile ganz einfach nicht mehr gültig. Minicom macht es auch so - Gibt eine kurze Warbung aus, das es ein nicht mehr gültiges Lockfile gibt und erzeugt dann ein neues.
Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)
Wie nicht einfach mit der UniqueInstance-Package ?
http://wiki.lazarus.freepascal.org/UniqueInstance/de
Ich habe es mit folgendem Mini-Code probiert, unter Linux Mint scheint es zu funktionieren.
http://wiki.lazarus.freepascal.org/UniqueInstance/de
Ich habe es mit folgendem Mini-Code probiert, unter Linux Mint scheint es zu funktionieren.
Code: Alles auswählen
program project1;
uses
UniqueInstanceRaw;
begin
if InstanceRunning then begin
WriteLn('Programm läuft schon !');
halt;
end;
WriteLn('Programm ist ma laufen <Enter>= Abbruch');
ReadLn;
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)
Ich habe es mit der UniqueInstance probiert, NICHT aber mit der UniqueInstanceRaw-Version - auf die bin ich nicht gestossen. Werde ich noch nachholen, danke.
Andreas
Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).