Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)

Antworten
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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)

Beitrag von af0815 »

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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

u-boot
Beiträge: 306
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)

Beitrag von u-boot »

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)

mse
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)

Beitrag von mse »

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.

TComponent bedingt keine GUI.

Socke
Lazarusforum e. V.
Beiträge: 3158
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)

Beitrag von Socke »

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.

In ein Lockfile kann man auch eine Prozess-ID schreiben.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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)

Beitrag von af0815 »

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

mse hat geschrieben:
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.

TComponent bedingt keine GUI.

Irgendwo sind da aber bindings zu einen widgetset hineingerutscht. Ich will da jetzt nicht tiefer gehen.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
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)

Beitrag von m.fuchs »

af0815 hat geschrieben:
mse hat geschrieben:
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.

TComponent bedingt keine GUI.

Irgendwo sind da aber bindings zu einen widgetset hineingerutscht. Ich will da jetzt nicht tiefer gehen.

Hm, das ist eigentlich nicht möglich, da SimpleIPC Teil von der FCL ist. Die dürfte nicht Widget-abhängig sein.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Timm Thaler
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)

Beitrag von Timm Thaler »

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.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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)

Beitrag von af0815 »

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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 6160
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)

Beitrag von Mathias »

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.

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

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
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)

Beitrag von af0815 »

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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten