Ich möchte über die Befehlszeile eine Liste aller Anwendungen erhalten, die derzeit auf meinem Computer ausgeführt werden. Es sollte dem ähneln, was Sie erhalten, wenn Sie den Aktivitätsmonitor öffnen und die Liste speichern.
Mir ist aufgefallen, dass der ps -a
Befehl etwas Ähnliches macht, aber die Namen der Prozesse abschneidet.
Mich interessiert nur der Name der Prozesse, daher brauche ich nicht alle Spalten, die der Aktivitätsmonitor ausgibt.
Update: 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
Ursachen lanchd
, die so angezeigt werden, /sbin/launchd
anstatt wie es im Aktivitätsmonitor angezeigt wird (dh nur lanchd
). Dies ist ein Problem, da Prozesse mit sehr langen Pfaden am Ende abgeschnitten werden (abhängig von der Größe meines Terminalfensters) und ich nicht einmal den Prozessnamen sehen kann.
ps -axc -o comm
-a
zeigt Prozesse von allen Benutzern (oder root) an-x
enthält Prozesse, die kein steuerndes Terminal haben-o comm
gibt Befehlspfade oder -namen aus-c
macht -o comm
nur Ausgabenamentell app "System Events" to name of application processes
würde nur Prozesse auflisten, die von einem Anwendungspaket gestartet wurden.
-bash
,
aus und zeigt keine Fehlermeldung an (was gut ist). Außerdem verwendet es einen einfacheren Befehl, danke.
sort
xargs
Richtiger Befehl, falsche Flaggen.
ps -Ao comm
, wenn Sie nur Prozessnamen wünschen.ps -Ao command
, wenn Sie Prozessnamen mit Argumenten wünschen.launchd
in ps
, es wird 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 seinen Pfad zu erhalten?Sie haben erwähnt, dass Sie es in einer Datei speichern möchten. Verwenden Sie im einfachsten Fall (derjenige, um den Sie sich am meisten sorgen)
ps ax > /path/to/outfile.txt
Dadurch wird eine Liste aller laufenden Prozesse (mit dem vollständigen Namen) in die durch den Pfad angegebene Datei gedruckt. Das ">" leitet die Druckausgabe (im Überschreibmodus) in die Datei um. Durch einfaches Ausgeben ps ax
wird es auf dem Bildschirm gedruckt.
Tipp: Wenn Sie keine Lust haben, ein vollständiges Verzeichnis einzugeben, ziehen Sie einen Ordner auf das Terminal, um den Pfad für Sie zu erhalten, und vervollständigen Sie ihn manuell mit dem Namen der Datei
Für den Fall, dass Sie irgendwann einige der anderen Spalten benötigen ... Überprüfen Sie auch die Manpage für ps, indem Sie man ps
in die Befehlszeile eingeben, und sehen Sie sich andere Optionen an. Hier ist ein weiteres Beispiel, das die CPU-Auslastung und den Arbeitsspeicher für jeden Prozess (in Prozent) ausgibt, gefolgt vom Befehl (process):
ps ax -o %cpu -o %mem -o command > /path/to/outfile.txt
Verwenden
# 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 nur den Befehl zu drucken, gibt es wahrscheinlich haltbarere Ansätze, aber zur Not würde ich einfach das Folgende tun. Sie werden wahrscheinlich gegen Ende ein bisschen Cruft bemerken, das mit Saiten zusammenhängt, für die nicht gedacht war basename
(wie -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 laufende Prozesse sind nicht unbedingt ausführbare Namen. Sie könnten ein direkter Aufruf sh
mit einer Reihe von Befehlen sein, die folgen.
/sbin/launchd
nur ausgegeben werden launchd
.ps ax
an basename
via weiter xargs
. Siehe Bearbeiten für weitere Details.sort
. Der letzte Befehl lautet also:ps ax -o comm | xargs -I % basename % | sort
Charlie Parker