Re: Liste der laufenden Prozesse / Programme ermitteln
Verfasst: 16.05.2015 15:27
				
				Hallo Nic..
mein kleines Progrämmchen ist soweit fertig und tut was es soll!
Neben dem Programm verwende ich noch ein paar kleine scripte:
- getprozesse -> ruft ps auf und erzeugt die Datei laufende.txt die Liste der aktiven Prozesse
- unload_all_mntd_sfs -> entfernt alle überflüssigen sfs aus dem Speicher
Hier mal das Programm "prozesscontroller.pb":
------------------------------------------------
und hier die Form dazu:
Evtl. baue ich die Form wieder aus, da sie im normalen Betrieb eigentlich nicht gebraucht wird.
Werde ich mir noch überlegen.
Zwei Dinge sind mir noch aufgefallen:
1. Unter Linux kann ich kein icon ins Programm einbauen. Die Optionen unter "Projekt" ist deaktiviert.
2. Wie bekomme ich das executable als Icon ins System-Tray ohne, dass es unten in der Programmleiste als laufendes Programm angezeigt wird? Ein Kollege hat mal testweise etwas ähnliches mit C Programmiert und das wird nicht als Programm in der Liste unten angezeigt sondern hat ein kleines Symbol im System-Tray.
LG
Wolfgang
			mein kleines Progrämmchen ist soweit fertig und tut was es soll!
Neben dem Programm verwende ich noch ein paar kleine scripte:
- getprozesse -> ruft ps auf und erzeugt die Datei laufende.txt die Liste der aktiven Prozesse
- unload_all_mntd_sfs -> entfernt alle überflüssigen sfs aus dem Speicher
Hier mal das Programm "prozesscontroller.pb":
Code: Alles auswählen
EnableExplicit
 
IncludeFile "prozesscontroller.pbf"
 
Define event, EventGadget, EventType, EventMenu, EventWindow, prglauf
Global erster.i, prozessbeendet.i, gefunden.i, teilstr$, neuerstr$
Global NewList neueprozesse.s()     
Global NewList alteprozesse.s()     
OpenWindow_0()
erster = 0
AddWindowTimer(Window_0, 123, 30000)
; ----- hier etwas das sofort beim Start erledigt werden soll eintragen
 
Repeat
  Event = WaitWindowEvent()
  EventGadget = EventGadget()
  EventType = EventType()
  EventMenu = EventMenu()
  EventWindow = EventWindow()
  
  If Event = #PB_Event_Timer And EventTimer() = 123
     analyse(event)
   EndIf 
  prglauf=Window_0_Events(Event)
Until prglauf=#False
End
 
;-------- ab hier die Proceduren für Buttons, etc. -----------------
 
Procedure beenden(Event)
  End
EndProcedure
Procedure analyse(event)
  Define hilf$, hilfstr$
  hilf$ = GetCurrentDirectory()+"getprozesse"
  RunProgram(hilf$)   ; erzeugt die Datei "laufende.txt"
  ClearGadgetItems(editor_0)
  ClearList(neueprozesse())
  
  #DATEI_REPORT = 1
  If ReadFile(#DATEI_REPORT, GetCurrentDirectory()+"laufende.txt")                               
    While Eof(#DATEI_REPORT) = #False
      
      hilfstr$ = ReadString(#DATEI_REPORT)       
      If Mid(hilfstr$,23,1) = "/"
        If FindString(hilfstr$,"/bin/busybox init") = 0
          If FindString(hilfstr$,"/sbin/udevd") = 0
            If FindString(hilfstr$,"/sbin/getty") = 0
              If FindString(hilfstr$,"/usr/bin/xinit") = 0
                If FindString(hilfstr$,"/usr/local/apps/ROX-Filer/ROX-Filer") = 0
                  If FindString(hilfstr$,"/usr/local/pup_event/pup_event_frontend_d") = 0
                    If FindString(hilfstr$,"/usr/sbin/cupsd") = 0
                      If FindString(hilfstr$,"/usr/bin/dbus-daemon") = 0
                        If FindString(hilfstr$,"/usr/local/firewallstate") = 0
                          If FindString(hilfstr$,"/usr/lib/i386-linux-gnu/gconf") = 0
                            AddGadgetItem(editor_0,-1,hilfstr$)
                            AddElement(neueprozesse())
                            neueprozesse() = hilfstr$
                          EndIf  
                        EndIf
                      EndIf
                    EndIf
                  EndIf
                EndIf
              EndIf
            EndIf  
          EndIf
        EndIf
      EndIf
    Wend
    CloseFile(#DATEI_REPORT)
  EndIf
  
  prozessbeendet = 0
  If erster = 0                  ; wenn es der erste Durchlauf ist
    ForEach(neueprozesse())
      AddElement(alteprozesse())
      alteprozesse() = Mid(neueprozesse(),23)
    Next  
    erster = 1
  Else
    ForEach(alteprozesse())    ; pruefen ob ein alter Prozess in der neuen Liste fehlt
      gefunden = 0
      teilstr$ = alteprozesse()
      ForEach(neueprozesse())
        neuerstr$ = neueprozesse()
        If FindString(neuerstr$,teilstr$) > 0
          gefunden = 1
        EndIf  
      Next  
      If gefunden = 0
        prozessbeendet = 1
      EndIf  
    Next
    ClearList(alteprozesse())
    ForEach(neueprozesse())
      AddElement(alteprozesse())
      alteprozesse() = Mid(neueprozesse(),23)
    Next  
    
  EndIf  
  If prozessbeendet = 1
    RunProgram("/usr/sbin/ceelab/lazy-sfs-unload/unload_all_mntd_sfs")
  EndIf  
EndProcedure
und hier die Form dazu:
Code: Alles auswählen
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
Global Window_0
Global Button_0, Button_1, Editor_0
Enumeration FormFont
  #Font_Window_0_0
EndEnumeration
LoadFont(#Font_Window_0_0,"Droid Sans Mono", 10)
Declare ResizeGadgetsWindow_0()
Declare beenden(EventType)
Declare analyse(EventType)
Procedure OpenWindow_0(x = 0, y = 0, width = 710, height = 230)
  Window_0 = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
  Button_0 = ButtonGadget(#PB_Any, 340, 200, 230, 25, "Programm beenden")
  GadgetToolTip(Button_0, "Beendet die Prozessueberwachung")
  Button_1 = ButtonGadget(#PB_Any, 70, 200, 100, 25, "analyse")
  Editor_0 = EditorGadget(#PB_Any, 20, 20, 680, 170)
  SetGadgetFont(Editor_0, FontID(#Font_Window_0_0))
EndProcedure
Procedure ResizeGadgetsWindow_0()
  Protected FormWindowWidth, FormWindowHeight
  FormWindowWidth = WindowWidth(Window_0)
  FormWindowHeight = WindowHeight(Window_0)
  ResizeGadget(Button_0, 340, FormWindowHeight - 30, 230, 25)
  ResizeGadget(Button_1, 70, FormWindowHeight - 30, 100, 25)
  ResizeGadget(Editor_0, 20, 20, FormWindowWidth - 30, FormWindowHeight - 60)
EndProcedure
Procedure Window_0_Events(event)
  Select event
    Case #PB_Event_SizeWindow
      ResizeGadgetsWindow_0()
    Case #PB_Event_CloseWindow
      ProcedureReturn #False
    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect
    Case #PB_Event_Gadget
      Select EventGadget()
        Case Button_0
          beenden(EventType())          
        Case Button_1
          analyse(EventType())          
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure
Werde ich mir noch überlegen.
Zwei Dinge sind mir noch aufgefallen:
1. Unter Linux kann ich kein icon ins Programm einbauen. Die Optionen unter "Projekt" ist deaktiviert.
2. Wie bekomme ich das executable als Icon ins System-Tray ohne, dass es unten in der Programmleiste als laufendes Programm angezeigt wird? Ein Kollege hat mal testweise etwas ähnliches mit C Programmiert und das wird nicht als Programm in der Liste unten angezeigt sondern hat ein kleines Symbol im System-Tray.
LG
Wolfgang