Liste aller Prozesse (Nur Namen)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Liste aller Prozesse (Nur Namen)

Beitrag von mauser » 26.02.2006 00:26:23

hi,

ich suche eine schöne Möglichkeit, eine Liste aller Namen von laufenden Prozessen zu bekommen. Praktisch die letzte Spalte von ps aux. Die Lösung soll entweder per bash oder Python realisiert werden, da die Funktion später in einem Python-Programm verwendet werden soll.

Der erste Gedanke war die Ausgabe von ps aux mit cut zu bearbeiten, aber es sind ja zwischen den einzelnen Spalten unterschiedlich viele Leerzeichen etc.

Ein anderer Ansatz wäre von hinten loszugehen und alle Strings bis zu dem Auftreten der Time Spalte auszulesen, wobei man die Time-Spalte dann per regexp erkennen lassen könnte. Das ist mir aber eigentlich zu "unschön", da es Probleme geben kann wenn im Prozessnamen auch ein Teil auftaucht, der dem Time-Format ähnelt.

Hat jemand einen besseren Vorschlag ? Ich habe auch schon an /proc gedacht (Datei /proc/$pid/status auslesen), aber dort finde ich auch Einträge von Modulen . .. (z.b. taucht bei mir ipw2200 auf)(diese tauchen ja auch in ps aux auf, sind dort aber durch eckige klammern gekennzeichnet..)
Vielen Dank schonmal für eure Vorschläge,
mfg
mauser

Benutzeravatar
C_A
Beiträge: 1082
Registriert: 22.04.2004 14:51:01
Lizenz eigener Beiträge: GNU General Public License

Beitrag von C_A » 26.02.2006 00:36:52

vielleicht:

Code: Alles auswählen

#!/usr/bin/env python
import os
ps=os.popen('ps aux', 'r')
l=[]
for i in ps:
        if i.split()[10] == 'COMMAND':
                continue
        l.append(i.split()[10])
l.sort()
for i in l:
        print i

darkday
Beiträge: 71
Registriert: 03.11.2005 14:58:03

Beitrag von darkday » 26.02.2006 00:37:42

Wenn du ps faux mit awk bearbeitest, müsste es gehen, denn awk ist es egal wie viele Leerzeichen dazwischen sind.

Es müsste dann in etwa so aussehen:

Code: Alles auswählen

ps faux | awk -F" " '{print $11}'
wobei es dann noch einige leerzeichen im Namen hinten geben kann, da muss man evtl noch n bissl handarbeit anlegen

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 26.02.2006 11:59:21

hi,

danke an euch beide für eure schnellen Antworten !

Anscheinend ist Python's split auch besser gegen die Leerzeichen gewappnet wie cut. Eigentlich hätte ich da auch selber drauf kommen können..
Ich habe jetzt den Vorschlag con C_A übernommen und ihn so abgewandelt, das er keine Module mehr anzeigt und den vollständigen Namen des Prozesses, auch wenn er Leerzeichen enthält:

Code: Alles auswählen

      1 #!/usr/bin/env python
      2 import os
      3 import re
      4 
      5 
      6 p=re.compile('\[.+\]')
      7 
      8 ps=os.popen('ps aux', 'r')
      9 l=[]
     10 for i in ps:
     11         if i.split()[10] == 'COMMAND':
     12                 continue
     13         append_string=i.split()[10]
     14         try:
     15            for ii in range (11,len(i.split())):
     16                 append_string+=" "+i.split()[ii]
     17         except Exception:
     18                 pass
     19 
     20         if not p.match(append_string):
     21                 l.append(append_string)
     22 
     23         l.sort()
     24 for i in l:
     25        print i
mfg
mauser

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 26.02.2006 12:15:43

Code: Alles auswählen

ps -ax | cut -d : -f2 | cut -d " " -f2
markus

ToPeG
Beiträge: 437
Registriert: 14.04.2004 00:42:06

Beitrag von ToPeG » 26.02.2006 15:06:02

Warum so kompliziert?

Code: Alles auswählen

ps -aAo "%c" --no-heading
Das ist doch einfacher. :-)

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 26.02.2006 15:13:27

ToPeG hat geschrieben:Warum so kompliziert?

Code: Alles auswählen

ps -aAo "%c" --no-heading
Das ist doch einfacher. :-)
Einfacher schon, aber nicht dieselbe Ausgabe :) Denn bei dir fehlen die Argumente der Prozesse sowie die Klammern um die Module.. Ohne die sind die Module nicht mehr als solche zu erkennen ..
mfg
mauser

ToPeG
Beiträge: 437
Registriert: 14.04.2004 00:42:06

Beitrag von ToPeG » 26.02.2006 15:33:17

"man ps" hätte weitergeholfen ;-)

Code: Alles auswählen

ps -aAo "%a" --no-heading

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 26.02.2006 15:46:34

Jepp, das passt schon eher ;-)
mfg
mauser

DeletedUserReAsG

Beitrag von DeletedUserReAsG » 26.02.2006 17:50:14

Kleiner Hinweis: Die Teile in den eckigen Klammern sind keine Module, sondern auch Prozesse.

cu

Benutzeravatar
mauser
Beiträge: 1854
Registriert: 27.01.2005 22:34:48

Beitrag von mauser » 26.02.2006 17:55:08

Aber nur Prozesse, die etwas direkt mit dem Kernel zu tun haben, oder nicht ?
Zumindest ist das bei mir der Fall, darum will ich die ja auch gerne rausschneiden..
Ja 'Module' war wohl ein Fehlgriff, bin darauf wegen dem Netzwerkkartentreiber gekommen..
mfg
mauser

Antworten