Launcher Daemon

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Launcher Daemon

Beitrag von cxAlex »

Ein kleiner Daemon den ich mir in 5 Minuten zusammengeschustert habe der schlicht und einfach dafür sorgt das Programme am laufen bleiben und sie bei Bedarf einfach neu startet (Wie zum Beispiel abstürzende Proxy-Server ... :twisted: )

Der Source sollte leicht verständlich sein.

Code: Alles auswählen

; Daemon Daten
Structure DAEMON_Data
  Program$
  Para$
  Path$
  Stop.i
EndStructure

; Daemon arbeiter
Procedure DAEMON_Worker(*Daemon.DAEMON_Data)
  Protected hProg
  
  With *DAEMON
    Repeat
      
      ; Stop - Flag, wir beenden ...
      If \Stop
        SignalSemaphore(\Stop)
        ProcedureReturn #True
      EndIf
      
      ; Programm starten ...
      hProg = RunProgram(\Program$, \Para$, \Path$, #PB_Program_Open)
      If Not IsProgram(hProg)
        Break  
      EndIf
      
      ; Läuft das Programm noch?
      While ProgramRunning(hProg)
        Delay(100)
        If \Stop
          SignalSemaphore(\Stop) 
          ProcedureReturn #True
        EndIf
      Wend
      
    ForEver
    ; Auf das Beenden warten
    Repeat
      Delay(10)
    Until \Stop
    SignalSemaphore(\Stop)
    
  EndWith
EndProcedure

; Daemon starten
Procedure DAEMON_Start(Program$, Para$ = "", Path$ = "")
  Protected *DAEMON.DAEMON_Data = AllocateMemory(SizeOf(DAEMON_Data))
  InitializeStructure(*DAEMON, DAEMON_Data)
  
  With *DAEMON
    
    ; Parameter erstellen
    \Program$ = Program$
    \Para$ = Para$
    If Not Path$
      \Path$ = GetPathPart(Program$)
    Else
      \Path$ = Path$
    EndIf
    
    CreateThread(@DAEMON_Worker(), *DAEMON)
  EndWith
EndProcedure

; Daemon beenden
Procedure DAEMON_Stop(*Daemon.DAEMON_Data)
  With *Daemon
    ; Daemon beenden
    \Stop = CreateSemaphore()
    WaitSemaphore(\Stop)
    FreeSemaphore(\Stop)
    
    ; Daemon Freigeben
    ClearStructure(*Daemon, DAEMON_Data)
    FreeMemory(*Daemon)
  EndWith
EndProcedure


DAEMON_Start("cmd")

Repeat
  Delay(10)
ForEver
Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
Bisonte
Beiträge: 2470
Registriert: 01.04.2007 20:18

Re: Launcher Daemon

Beitrag von Bisonte »

Ich hab es nun noch nicht getestet, aber startet das Teil auch Programme neu,
wenn die Meldung von Windows aufpoppt : "Problem festgestellt... blabla" die auf
eine Usereingabe wartet ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: Launcher Daemon

Beitrag von cxAlex »

Nein, weil das Programm da eigentlich noch läuft :P Aber zumindest bei mir ist es so das Windows das Programm dann nach einer gewissen Zeit von alleine abschießt und dann wird es neu gestartet ...
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
Bisonte
Beiträge: 2470
Registriert: 01.04.2007 20:18

Re: Launcher Daemon

Beitrag von Bisonte »

Hast du eine Ahnung wo man das einstellen könnte ? Win7 ?
Bei mir dauert es mindestens gefühlte Ewigkeiten (Bäume werden zu Öl usw.) ,
bzw. hab ich das Verhalten noch nicht bemerkt bei mir.

Edit: Wäre es evt. dieses hier ?
und dann AutoEndTasks ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten