gelöst: Liste der laufenden Prozesse / Programme ermitteln
-
- 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
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
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
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
- 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
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.
-
- Beiträge: 328
- Registriert: 06.06.2013 20:37
- Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10
Re: Liste der laufenden Prozesse / Programme ermitteln
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
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
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
- 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:
-
- Beiträge: 328
- Registriert: 06.06.2013 20:37
- Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10
Re: Liste der laufenden Prozesse / Programme ermitteln
Das ist ein Windowmanager.NicTheQuick hat geschrieben:Was ist JWM?
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
So eine Datei sieht bei mir z.B. so aus und mich interessieren nur die Prozesse die bereits mit einem "m" markiert
angezeigt werden.
Man sieht sofort, dass 579m und 141m Module sind.[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
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
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
- 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
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.
-
- Beiträge: 328
- Registriert: 06.06.2013 20:37
- Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10
Re: Liste der laufenden Prozesse / Programme ermitteln
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
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
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck
Re: Liste der laufenden Prozesse / Programme ermitteln
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).
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).
- 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
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
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
-
- Beiträge: 328
- Registriert: 06.06.2013 20:37
- Computerausstattung: Satellite A210-19Z, Samsung Netbook N130, VPAD10
Re: Liste der laufenden Prozesse / Programme ermitteln
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
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
Elektronik, Mikrocontroller, CNC-Technik, 3D-Druck