gelöst: Liste der laufenden Prozesse / Programme ermitteln

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: Liste der laufenden Prozesse / Programme ermitteln

Beitrag von derschutzhund »

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

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
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
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Liste der laufenden Prozesse / Programme ermitteln

Beitrag von ts-soft »

Code: Alles auswählen

gtk_window_set_icon_(WindowID(0), ImageID(0))
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: Liste der laufenden Prozesse / Programme ermitteln

Beitrag von derschutzhund »

Sollte es so gehen?

Code: Alles auswählen

EnableExplicit
 
UsePNGImageDecoder()

DataSection
 LINUXICON:
 IncludeBinary "/mnt/sda1/PureBasic/Prozesstimer/cnccheckerC.png"
EndDataSection

IncludeFile "prozesscontroller.pbf"
 
Define event, EventGadget, EventType, EventMenu, EventWindow, prglauf
Global erster.i, prozessbeendet.i, gefunden.i, teilstr$, neuerstr$, icon.i
Global NewList neueprozesse.s()     
Global NewList alteprozesse.s()     

OpenWindow_0()

icon = CatchImage(#PB_Any, ?LINUXICON)

gtk_window_set_icon_(WindowID(0), ImageID(icon))
Programm geht natürlich noch weiter...

Ein ICON wird leider nicht angezeigt.

LG

Wolfgang
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Liste der laufenden Prozesse / Programme ermitteln

Beitrag von ts-soft »

Wenn WindowID(0) stimmt, sollte es gehen. Aber nicht jeder Windowmanager zeigt auch Icons an!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: Liste der laufenden Prozesse / Programme ermitteln

Beitrag von derschutzhund »

ts-soft hat geschrieben:Wenn WindowID(0) stimmt, sollte es gehen. Aber nicht jeder Windowmanager zeigt auch Icons an!
WindowID(0) stimmt!

Ich nutzen als Windowmanager den JWM.

Schade, dass das mit Purebasic nicht geht!

LG

Wolfgang
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Liste der laufenden Prozesse / Programme ermitteln

Beitrag von ts-soft »

Es geht schon, aber Dein Manger zeigt anscheinend keine Icons an, wie die meisten anderen auch. Evtl. siehst Du das Icon in der Startleiste o. ä., je nachdem was der nutzt.
Das hat aber auch rein garnichts mit PureBasic zu tun :wink:

Gruß
Thomas

PS: hab hier unter Ubuntu Mate auch nur 2 Themes wo das Programm-Icon im Fenster oben links angezeigt wird.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
auser
Beiträge: 58
Registriert: 17.05.2011 10:56

Re: Liste der laufenden Prozesse / Programme ermitteln

Beitrag von auser »

NicTheQuick hat geschrieben: Es gibt fertige Programme, die das können und tatsächlich loggen, wann welche Prozesse gestartet wurden. Siehe auch hier: How can I log all process launches in Linux
Sieht man auch mit ps (ps -eo pid,lstart,cmd) oder halt wiederum im proc (awk '{print $22}' < /proc/$PID/stat). Auditd ist ziemlich nützlich wenn man rausfinden will warum z.B. auf mysteriöse Weise ein File immer wieder verschwindet aber (im Vergleich zu ps oder dem proc-fs) standardmässig oft nicht installiert und nicht immer ganz so trivial (verschiedene Systemcalls, HD voll, ...).
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: Liste der laufenden Prozesse / Programme ermitteln

Beitrag von derschutzhund »

Das hat aber auch rein garnichts mit PureBasic zu tun :wink:
Na ja, muss eigentlich schon, weil es bei anderen Binärdateien auch geht!
Ein kleines Progrämmchen 13Kb vom Kollegen wird als Minisymbol in der Taskleiste unten rechts in meinem Linux angezeigt!
Also geht es, aber halt mit PB nicht!

LG

Wolfgang
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Liste der laufenden Prozesse / Programme ermitteln

Beitrag von NicTheQuick »

Das Thema geht jetzt etwas in die falsche Richtung. Zudem habe ich das Gefühl, dass derschutzhund vom SysTrayIcon redet und ts-soft vom Programm-Icon. Das sind zwei unterschiedliche Dinge.
Bild
derschutzhund
Beiträge: 328
Registriert: 06.06.2013 20:37
Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10

Re: Liste der laufenden Prozesse / Programme ermitteln

Beitrag von derschutzhund »

Natürlich geht es um das System-Tray! Das steht auch im obersten Beitrag auf dieser Seite!
In den Optionen kann ich bei der Erzeugung der Binärdatei einstellen ob es normal sichtbar oder unsichtbar sein soll aber ich finde nicht etwas zum System-Tray!
Wenn ich es unsichtbar schalte dann kann ich es halt nicht mehr abschalten was nicht so schön ist.
Hab ich da vielleicht was übersehen?

EDIT: Habe gerade gesehen, dass es sogar ein Example zu dem Thema gibt "systray.pb".
Damit experimentiere ich jetzt mal etwas, aber das Beispiel sieht so aus wie ich es haben will.
Jetzt muss es nur noch mit meinem eigenen Programm laufen!

LG

Wolfgang
Zuletzt geändert von derschutzhund am 18.05.2015 15:07, insgesamt 1-mal geändert.
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Antworten