Eine Liste der aktuell laufenden Prozesse abrufen

4

Ich möchte eine Liste aller Anwendungen erhalten, die derzeit auf meinem Computer ausgeführt werden, und zwar über die Befehlszeile. Es sollte dem ähnlich sein, was Sie erhalten, wenn Sie den Aktivitätsmonitor öffnen und die Liste speichern.

Mir ist das aufgefallen ps -a Befehl führt etwas Ähnliches aus, schneidet jedoch die Namen der Prozesse ab.

Ich interessiere mich nur für den Namen der Prozesse, daher brauche ich nicht alle Spalten, die Activity Monitor ausgibt.

Aktualisieren: Ich hätte klarer sein sollen ... Ich möchte nicht, dass der gesamte Pfad zum Prozess angezeigt wird. Ich möchte nur den Namen des Prozesses, wie er im Aktivitätsmonitor angezeigt wird. Zum Beispiel, ps verursacht lanchd angezeigt werden als /sbin/launchd und nicht so, wie er im Aktivitätsmonitor angezeigt wird (d. h lanchd ). Dies ist ein Problem, da Prozesse mit sehr langen Pfaden (abhängig von der Größe meines Terminalfensters) abgeschnitten werden und ich den Prozessnamen nicht einmal sehen kann.

Senseful
quelle

Antworten:

2
ps -axc -o comm
  • -a zeigt Prozesse von allen Benutzern (oder root) an
  • -x Umfasst Prozesse, die kein steuerndes Terminal haben
  • -o comm gibt Befehlspfade oder Namen aus
  • -c macht -o comm Nur Ausgabennamen

tell app "System Events" to name of application processes würde nur Prozesse auflisten, die von einem Anwendungspaket gestartet werden.

Lri
quelle
Dies gibt mir die gleichen Informationen wie die Antwort von Ephsmith, schließt aber aus -bash. sort. xargs und zeigt keine Fehlermeldung an (was eine gute Sache ist). Außerdem verwendet es einen einfacheren Befehl, danke.
Senseful
@Senseful, tut mir leid, dass :(. Zumindest habe ich etwas geholfen, wenn es darum geht, es in einer Datei zu speichern.
ephsmith
2

Richtiger Befehl, falsche Flaggen.

  • Benutzen ps -Ao comm wenn Sie nur Prozessnamen wünschen.
  • Benutzen ps -Ao command wenn Sie Prozessnamen mit Argumenten wünschen.
bahamat
quelle
Der erste Befehl gibt immer noch den gesamten Pfad des Prozesses aus, wodurch er an der Länge meines Terminalfensters unterbrochen wird. Zum Beispiel in Activity Monitor sehe ich launchd im pswird als angezeigt /sbin/launchd. Es ist kein Problem für diesen Prozess, aber es ist ein Problem für diejenigen, die in vielen Ordnern verschachtelt sind. Gibt es eine Möglichkeit, nur den Namen des Prozesses ohne Pfad zu ermitteln?
Senseful
Ah ja. Sie sagten "Like Activity Monitor", aber ich dachte nicht, dass es eine Rolle spielen würde. Da ich sehe, dass Ihre Frage bereits beantwortet wurde, lasse ich es einfach dabei.
bahamat
2

Sie haben erwähnt, dass Sie es in einer Datei speichern möchten. Verwenden Sie im einfachsten Fall denjenigen, um den Sie sich am meisten Sorgen machen

ps ax > /path/to/outfile.txt

Dadurch wird eine Liste aller laufenden Prozesse (mit dem vollständigen Namen) an die durch den Pfad angegebene Datei gedruckt. Das "& gt;" Leitet die Druckausgabe (im Überschreibmodus) auf die Datei um. Einfach ausgeben ps ax wird es auf dem Bildschirm ausdrucken.

Tipp: Wenn Sie kein vollständiges Verzeichnis eingeben möchten, ziehen Sie einen Ordner an das Terminal, um den Pfad für Sie abzurufen, und füllen Sie den Dateinamen manuell aus

Falls Sie am Ende einige der anderen Spalten haben wollten ... Überprüfen Sie auch die Manpage für ps, indem Sie tippen man ps in der Befehlszeile und schauen Sie sich andere Optionen an. Hier ist ein weiteres Beispiel, in dem die CPU-Auslastung und der Arbeitsspeicher für jeden Prozess (in Prozent) gefolgt vom Befehl (Prozess) gedruckt werden:

ps ax -o %cpu -o %mem -o command > /path/to/outfile.txt

Benutzen

# Sort by cpu usage with the 'r' option
ps arx -o %cpu -o %mem -o command > /path/to/outfile.txt

# Sort by memory usage with the 'm' option
ps arm -o %cpu -o %mem -o command > /path/to/outfile.txt

BEARBEITEN

Um zu drucken gerade Für den Befehl gibt es wahrscheinlich dauerhaftere Ansätze, aber zur Not würde ich einfach folgendes tun. Sie werden wahrscheinlich am Ende ein bisschen Cruft bemerken, der sich auf Saiten bezieht, für die dies nicht gedacht ist basename (mögen -bash ), aber der Rest von dem, was Sie wollen, wird mit diesem Quickie da sein.

ps ax -o comm | xargs -I % basename % > /path/to/outfile.txt

HINWEIS: Einige Prozesse, die ausgeführt werden, sind nicht unbedingt ausführbare Namen. Sie könnten ein direkter Anruf sein sh mit einer Folge von Befehlen, die folgen.

ephsmith
quelle
Das Verhalten bei AskDifferent ist merkwürdig. Eine Antwort, die die Frage nicht beantwortet, hat einen höheren Stimmenrang. Das Speichern in eine Datei wurde nicht einmal adressiert :( und die Argumente für die vom OP angeforderte Ausgabe sind falsch.
ephsmith
1
Danke für die Antwort, ich habe es versucht, aber es gibt immer noch den gesamten Pfad zum Prozess aus. Ich suche eine Lösung welche nur gibt den Prozessnamen und nicht seinen Pfad aus. Zum Beispiel statt ausgeben /sbin/launchdsollte es nur ausgeben launchd.
Senseful
Okay. Kein biggie. Pipe einfach die Ausgabe von ps ax zu basename über xargs. Siehe Bearbeiten für weitere Details.
ephsmith
1
Super, danke! Um es festzuhalten, endete ich damit sort auch. Der letzte Befehl lautet also: ps ax -o comm | xargs -I % basename % | sort
Senseful