Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)

Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)

Beitragvon af0815 » 19. Jan 2018, 11:11 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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3455
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon u-boot » 19. Jan 2018, 12:59 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)
u-boot
 
Beiträge: 297
Registriert: 9. Apr 2009, 09:10
Wohnort: 785..
OS, Lazarus, FPC: Ubuntu 9.10 (L 0.9.28 FPC 2.2.4) | 
CPU-Target: 32Bit
Nach oben

Beitragvon mse » 19. Jan 2018, 13:13 Re: Uniqueinstance in Konsolenprogramm (RasPi, 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.

TComponent bedingt keine GUI.
mse
 
Beiträge: 1967
Registriert: 16. Okt 2008, 09: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
Nach oben

Beitragvon Socke » 19. Jan 2018, 13:55 Re: Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)

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
Socke
 
Beiträge: 2538
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon af0815 » 19. Jan 2018, 14:15 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 :-)

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).
af0815
 
Beiträge: 3455
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon m.fuchs » 19. Jan 2018, 15:01 Re: Uniqueinstance in Konsolenprogramm (RasPi, keine GUI)

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
m.fuchs
 
Beiträge: 1963
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.8.4, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon Timm Thaler » 19. Jan 2018, 16:03 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.
Timm Thaler
 
Beiträge: 668
Registriert: 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
Nach oben

Beitragvon af0815 » 19. Jan 2018, 16:08 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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3455
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon Mathias » 19. Jan 2018, 17:54 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.

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 gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4250
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon af0815 » 19. Jan 2018, 19:32 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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3455
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

• Themenende •

Zurück zu Linux



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

cron
porpoises-institution
accuracy-worried