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

gelöst: Liste der laufenden Prozesse / Programme ermitteln

Beitrag von derschutzhund »

Hallöchen,

ich möchte unter Linux ein bashscript starten wenn Programme geschlossen werden.
Wie komme ich an die Info welche Programme gerade laufen?
Ich hatte mir so überlegt einfach jede Minute einmal die laufenden Programme auszulesen und mit den Programmen zu vergleichen die eine Minute vorher noch aktiv waren.
Wenn bestimmte Programme nicht mehr aktiv sind dann erfolgt eine Aktion.
Wird mein Analyseprogramm beim booten gestartet speichere ich zunächst mal die laufenden Prozesse als Standart ab weil es um die später nicht gehen soll sondern nur um Prozesse die ich ab dann starte und beende.

Plan B: könnte mein Analyseprogramm auch automatisch jedes Mal gestartet werden wenn ein neues Programm gestartet oder beendet wird?

Hoffe ich konnte einigermaßen beschreiben worum es geht?!

LG

Wolfgang
Zuletzt geändert von derschutzhund am 25.05.2015 21:31, 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
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
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 »

Du findest alle laufenden Prozesse von Linux im virtuellen Verzeichnis /proc. Wenn du im Terminal "man proc" eingibst, wird auch ziemlich genau erklärt, was die einzelnen Dateien und Ordner darstellen und was man ihnen entnehmen kann.
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 »

Hab es mir angesehen aber die Infos die ich eigentlich suche kann ich nicht finden.
Es geht um die Programme die z.B. bei JWM unten in der Leiste angezeigt werden.
Wo finde ich die denn?

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: 8675
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 »

Was ist JWM?
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 »

NicTheQuick hat geschrieben:Was ist JWM?
Das ist ein Windowmanager.

Habe einen neuen Ansatz gefunden.
Bin zufällig auf das Linuxkommando "top" gestoßen.
Es zeigt die aktiven Prozesse an.
Ich könnte doch ein kleines Script erstellen:

Code: Alles auswählen

#!/bin/sh
rm laufende.txt
top > laufende.txt
Die Datei "laufende.txt" werte ich dann mit Purebasic aus.
So eine Datei sieht bei mir z.B. so aus und mich interessieren nur die Prozesse die bereits mit einem "m" markiert
angezeigt werden.
[H[JMem: 1802692K used, 133856K free, 0K shrd, 48K buff, 149K cached
CPU: 22% usr 4% sys 0% nic 72% idle 0% io 0% irq 0% sirq
Load average: 1.01 0.82 0.65 2/195 31156
[7m PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND[0m
3948 1 root R 579m 31% 1 18% /usr/lib/firefox/firefox
31156 31154 root R 4380 0% 0 5% top
12383 12327 root S 141m 7% 1 0% {pbcompiler} /usr/local/PureBasic/
11630 11629 root S < 79580 4% 0 0% X :0 -br -nolisten tcp
12327 1 root S 57776 3% 0 0% /usr/local/PureBasic/purebasic_dem
11745 1 root S 36844 2% 0 0% {ROX-Filer} /usr/local/apps/ROX-Fi
3801 1 root S 32156 2% 0 0% gtkdialog -G 384x24+448+656 -p MAI
11777 11745 root S 27212 1% 1 0% clipit
12965 1 root S 25612 1% 0 0% retrovol -hide
11645 11629 root S 23720 1% 1 0% jwm
11808 11745 root S 22748 1% 1 0% powerapplet_tray
11800 11745 root S 22440 1% 1 0% freememapplet_tray
11804 11745 root S 22424 1% 0 0% network_tray
14187 1 root S 22304 1% 1 0% {firewallstate} /usr/local/firewal
14009 1 root S 21620 1% 1 0% conky -a top_right -x 40 -y 497 --
14000 1 root S 21512 1% 0 0% conky -a top_right -x 40 -y 417 --
13989 1 root S 21448 1% 0 0% conky -a top_right -x 40 -y 290 --
14003 1 root S 21448 1% 1 0% conky -a top_right -x 40 -y 100 --
14001 1 root S 21388 1% 1 0% conky -a top_right -x 40 -y 365 --
13999 1 root S 20732 1% 0 0% conky -a top_right -x 40 -y 30 --c
Man sieht sofort, dass 579m und 141m Module sind.
Die beiden würde ich in einer kleinen Liste speichern und bei der nächsten Untersuchung prüfen ob beide noch
aktiv sind. Wenn nicht dann wird eine Aktion ausgeführt.

Irgendwie sieht es aber so aus als ob das einmal gestartete bash-script (siehe oben) ständig updates in die Datei "laufende.txt" sendet.

Was hälst du von dem Ansatz?

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: 8675
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 »

Dann nutz lieber ps plus entsprechende Parameter, z. B. "ps aux". Das gibt dir auch alle Prozesse aus. Mit "man ps" kannst du nachlesen, was man damit noch alles ausgebenn kann.
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 »

Ok, dann versuche ich damit mal was zu machen.
Noch eine Frage zu einem Zeitraster.
Eigentlich brauche ich dann ja nur noch ein einstellbares Zeitraster nach dem jeweils das Programm kurz gestartet wird und dann wieder schlafen geht. Ich hatte da so an 30 Sek. bis 60 Sekunden gedacht.
Jetzt gibt es natürlich die Möglichkeit ständig die Systemzeit abzufragen aber dann belastet der Prozess ja die CPU.
Gibt es vielleicht etwas wie einen Timerinterrupt der, wenn er durch Zeitüberschreitung ausgelöst wird, das Testprogramm aufruft?
Könnte man das vielleicht auch nur mit Bash lösen?

LG

Wolfgang
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
auser
Beiträge: 58
Registriert: 17.05.2011 10:56

Re: Liste der laufenden Prozesse / Programme ermitteln

Beitrag von auser »

ps in bash-scripten ist schon ok. Findet man nicht selten in init-scripts. Dort findet man auch noch anderes was hier evtl. nützlich sein könnte, je nachdem was man genau machen will. Zum Beispiel "kill -0" (ob man als der User ein (anderes) Signal an den Prozess schicken darf und er dafür natürlich laufen muss) oder "pgrep" (sucht eine Process-ID). Bedient sich aber alles (wie auch "ps") über 'nen "open" im /proc ("strace pgrep 1234", "strace ps 1234", "strace kill -0 1234"). Insofern ist das Auslesen vom /proc Verzeichnis wenn man es nicht über andere Tools sondern selbst machen will vermutlich die sinnvolleste Methode. In Skripten würd ich aber fertige Tools eben wie ps oder pgrep nehmen.

Was den Timer anbelangt. Kommt darauf an wie dein Prozess gestartet bzw. dein Prüfskript gestartet wird. Entweder du weißt die PID dann würd ich in dem Skript vermutlich einfach nach 'nem "sleep 30s" über pgrep checken ob's den noch gibt evtl in 'ner "while :; do irgendwas; sleep 30s; done" Schlaufe und es gibt natürlich auch die Crontab (ist ok für Skripte die z.B. einmal am Tag oder alle paar Stunden was checken sollen ...aber nicht unbedingt die beste Lösung für alles).
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
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 »

Es gibt da aber noch ein grundlegendes Problem.
Wenn du nur alle 30 Sekunden überprüfst, welche Prozesse laufen, dann kann der Prozess, der dich interessiert, schon mehrmals gestoppt und wieder gestartet worden sein, sodass du am Ende denkst, es hätte sich gar nichts getan.
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
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 »

Hallo Nic...

damit gibt es bei meiner Anwendung kein Problem!
Vielleicht muss ich es mal noch genauer beschreiben.
Ich arbeite an einem Puppylinux.
Da gibt es ein Konzept womit beliebige Programme / Programmpakete dynamisch ins System geladen werden wenn sie gebraucht werden. Das Programm selbst als auch alle Hilfsdateien und Abhängigkeiten befinden sich in einer Datei mit der Endung SFS.
Man kann diese Dateien bisher von Hand einzeln wieder aus dem System entfernen lassen wenn das Programm geschlossen wurde.
Das hat dann der Vorteil, dass weniger Arbeitsspeicher belegt wird.
Auch eine automatische Entladefunktion gibt es bereits, die jedoch nur mit wirklichen Bin-Dateien funktioniert und auch nur wenn die nicht vorher mit einem extra Script gestartet werden.
Ist alles etwas unhandlich, daher mein neuer Ansatz, der es ermöglicht jedes beliebige SFS wieder zu entladen wenn das Programm geschlossen wurde.
Die Routine zur automatischen Entladung nicht mehr aktiver SFS ist bereits fertig jetzt muss nur noch ermittelt werden wann Programme beendet werden damit diese Entladefunktion gestartet wird.
Natürlich könnte ich diese Entladefunktion gleich alle 30 Sekunden starten aber das script braucht eine gewisse Zeit und das möchte ich optimieren. Also das Entladescript nur starten wenn mit hoher Wahrscheinlichkeit auch ein SFS-Programm beendet wurde und nicht nur irgendein anderer Prozess.

LG

Wolfgang
Satellite A210-19Z, Samsung N130, VPAD10, WinXP, Win7, PuppyLinux, PB 5.24, 5.31. 5.70
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Antworten