Antworten:
Verwenden -o
Flagge.
Um nur Ihre eigenen Prozesse aufzulisten
ps -o command
Um alle Systemprozesse aufzulisten
ps -e -o command
Dies ist nicht die einzige Möglichkeit, Befehle aufzulisten. Sie können entweder mit Befehlszeilen-Flags oder nur als ausführbare Dateien gedruckt werden (was bei dieser command
Option der Fall ist).
Aus meinem Kommentar unten die Antwort:
befehl, args und cmd geben alle den vollen befehl. In der Tat sind Befehl und Befehl der man-Seite Aliase für args, einschließlich der - Flags. Das Komm gibt nur den Namen der ausführbaren Datei an. Aliase dazu sind ucmd und ucomm. Wenn ich AIX-Optionen falsch verstehe, können diese tatsächlich mit einem printf-ähnlichen Format angegeben werden,% a für args,% c für comm
Siehe man ps
für mehr Informationen zur Verwendung und die verfügbaren Formatoptionen
Ein programmatischer Ansatz wäre ein bisschen redundant, da er ps
uns bereits die Formatierungsoptionen bietet, dies kann jedoch durchgeführt werden awk
, was beim Umgang mit kolumnisierten Ausgaben sehr hilfreich ist.
ps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
Beachten Sie jedoch, dass dieser Code abbricht, wenn der Benutzername Leerzeichen enthält, z john doe
. Dies kann durch Hinzufügen einer gsub
Funktion geändert werden, die Ihren Benutzernamen aus der ps
Liste entfernt. Wenn jedoch mehrere Benutzer am System angemeldet sind, ist es möglicherweise schwierig, alle Benutzernamen aus der Ausgabe zu löschen. Sie sehen also, dass die -o
Flagge viel bevorzugter ist.
Randnotiz, sudo
ist nicht erforderlich, um alle Vorgänge mit aufzulistenps
comm
AIX-Format, wobei command
es sich um das Standard-GNU-Format handelt. AIX ist ein anderes * NIX-ähnliches System, daher kann diese Option aus Gründen der Kompatibilität verwendet werden. Ansonsten kein Unterschied
diff <(ps -eo comm) <(ps -eo command)
und da unten scheint es ein ziemliches Rasseln zu geben, kannst du das klarstellen?
command
, args
und cmd
alle geben das volle Kommando. In der Tat gibt die Manpage an command
und cmd
ist ein Alias für args
, wobei die -
Flags enthalten sind. Der comm
gibt nur den Namen der ausführbaren Datei an. Aliase dazu sind ucmd
und ucomm
. Ich habe die AIX-Optionen falsch verstanden, diese können tatsächlich mit einem printf-ähnlichen Format angegeben werden,% a für args,% c für comm
Ein allgemeinerer Weg. Wir bestimmen die Spalte des Befehls. Auf diese Weise spielt es keine Rolle, für welche Schalter verwendet werden ps
.
ps ax | awk -v p='COMMAND' 'NR==1 {n=index($0, p); next} {print substr($0, n)}'
Beispielausgabe
% ps aux | awk -v p='COMMAND' 'NR==1 {n=index($0, p); next} {print substr($0, n)}'
/sbin/init splash
[kthreadd]
[ksoftirqd/0]
[kworker/0:0H]
[rcu_sched]
[rcu_bh]
[migration/0]
[watchdog/0]
[watchdog/1]
[migration/1]
[ksoftirqd/1]
[kworker/1:0H]
[watchdog/2]
[migration/2]
[ksoftirqd/2]
[kworker/2:0H]
[khelper]
[kdevtmpfs]
[netns]
[perf]
[khungtaskd]
[writeback]
[ksmd]
[khugepaged]
[crypto]
[kintegrityd]
[bioset]
[kblockd]
[ata_sff]
[md]
[devfreq_wq]
[kswapd0]
[fsnotify_mark]
[ecryptfs-kthrea]
[kthrotld]
[acpi_thermal_pm]
[scsi_eh_0]
[scsi_tmf_0]
[scsi_eh_1]
[scsi_tmf_1]
[ipv6_addrconf]
[deferwq]
[charger_manager]
[kpsmoused]
[scsi_eh_2]
[scsi_tmf_2]
[kworker/0:1H]
[jbd2/sda1-8]
[ext4-rsv-conver]
[kauditd]
[kworker/0:2]
/lib/systemd/systemd-journald
/lib/systemd/systemd-udevd
[…]
Und worum geht es pstree
?
Beispielausgabe
% pstree -alU
systemd splash
├─ModemManager
│ ├─{gdbus}
│ └─{gmain}
├─NetworkManager --no-daemon
│ ├─dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper -pf /run/sendsigs.omit.d/network-manager.dhclient-eth0.pid -lf /var/lib/NetworkManager/dhclient-57cfb005-1dc6-410d-aebc-16d8d152abfd-eth0.lease -cf /var/lib/NetworkManager/dhclient-eth0.conf eth0
│ ├─dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d
│ ├─{gdbus}
│ └─{gmain}
├─VBoxClient --clipboard
│ └─VBoxClient --clipboard
│ └─{SHCLIP}
├─VBoxClient --display
│ └─VBoxClient --display
│ └─{VT_MONITOR}
├─VBoxClient --seamless
│ └─VBoxClient --seamless
│ └─{X11 events}
├─VBoxClient --draganddrop
│ └─VBoxClient --draganddrop
│ ├─{dndHGCM}
│ └─{dndX11}
├─VBoxService --pidfile /var/run/vboxadd-service.pid
│ ├─{automount}
│ ├─{control}
│ ├─{cpuhotplug}
│ ├─{memballoon}
│ ├─{timesync}
│ ├─{vminfo}
│ └─{vmstats}
├─VBoxService
│ ├─{automount}
│ ├─{control}
│ ├─{cpuhotplug}
│ ├─{timesync}
│ ├─{vminfo}
│ └─{vmstats}
├─accounts-daemon
│ ├─{gdbus}
│ └─{gmain}
├─agetty --noclear tty1 linux
├─apache2 -k start
│ ├─apache2 -k start
│ ├─apache2 -k start
│ ├─apache2 -k start
│ ├─apache2 -k start
│ └─apache2 -k start
├─at-spi-bus-laun
│ ├─dbus-daemon --config-file=/etc/at-spi2/accessibility.conf --nofork --print-address 3
│ ├─{dconf worker}
│ ├─{gdbus}
│ └─{gmain}
├─at-spi2-registr --use-gnome-session
│ ├─{gdbus}
│ └─{gmain}
├─atd -f
├─avahi-daemon
│ └─avahi-daemon
├─cgmanager -m name=systemd
├─colord
│ ├─{gdbus}
│ └─{gmain}
├─console-kit-dae --no-daemon
│ ├─62*[{console-kit-dae}]
│ ├─{gdbus}
│ └─{gmain}
├─cron -f
├─cups-browsed
│ ├─{gdbus}
│ └─{gmain}
├─cupsd -l
│ └─dbus dbus://
├─dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
├─dnsmasq -u lxc-dnsmasq --strict-order --bind-interfaces --pid-file=/run/lxc/dnsmasq.pid --listen-address 10.0.3.1 --dhcp-range 10.0.3.2,10.0.3.254 --dhcp-lease-max=253 --dhcp-no-override --except-interface=lo --interface=lxcbr0 --dhcp-leasefile=/var/lib/misc/dnsmasq.lxcbr0.leases --dhcp-authoritative
├─gdm
│ ├─gdm-session-wor
│ │ ├─gdm-x-session /usr/bin/gnome-session --autostart /usr/share/gdm/greeter/autostart
│ │ │ ├─Xorg vt7 -displayfd 3 -auth /run/user/120/gdm/Xauthority -nolisten tcp -background none -noreset -keeptty -verbose 3
│ │ │ │ ├─{llvmpipe-0}
│ │ │ │ ├─{llvmpipe-1}
│ │ │ │ └─{llvmpipe-2}
│ │ │ ├─dbus-daemon --print-address 4 --session
│ │ │ ├─gnome-session-b --autostart /usr/share/gdm/greeter/autostart
│ │ │ │ ├─gnome-settings-
│ │ │ │ │ ├─{dconf worker}
│ │ │ │ │ ├─{gdbus}
│ │ │ │ │ ├─{gmain}
│ │ │ │ │ └─{pool}
│ │ │ │ ├─gnome-shell --mode=gdm
│ │ │ │ │ ├─ibus-daemon --xim --panel disable
│ │ │ │ │ │ ├─ibus-dconf
│ │ │ │ │ │ │ ├─{dconf worker}
│ │ │ │ │ │ │ ├─{gdbus}
│ │ │ │ │ │ │ └─{gmain}
│ │ │ │ │ │ ├─ibus-engine-sim
│ │ │ │ │ │ │ ├─{gdbus}
│ │ │ │ │ │ │ └─{gmain}
│ │ │ │ │ │ ├─{gdbus}
│ │ │ │ │ │ └─{gmain}
│ │ │ │ │ ├─{JS GC Helper}
│ │ │ │ │ ├─{JS Sour~ Thread}
│ │ │ │ │ ├─{Sync}
│ │ │ │ │ ├─{dconf worker}
│ │ │ │ │ ├─{gdbus}
│ │ │ │ │ ├─{gmain}
│ │ │ │ │ ├─{llvmpipe-0}
│ │ │ │ │ ├─{llvmpipe-1}
│ │ │ │ │ ├─{llvmpipe-2}
│ │ │ │ │ └─{threaded-ml}
│ │ │ │ ├─{dconf worker}
│ │ │ │ ├─{gdbus}
│ │ │ │ └─{gmain}
│ │ │ ├─{gdbus}
│ │ │ └─{gmain}
│ │ ├─{gdbus}
│ │ └─{gmain}
[…]
Ich habe einen bescheidenen Weg gefunden, um dies von hier aus zu erreichen
sudo ps aux | rev | cut -d ' ' -f 1 | rev
rev
Durch Umkehren der Ausgabe von ps
und anschließendes Ausschneiden können Sie das erste Feld (welches das letzte ist!) eingrenzen und dann wieder umkehren ...
arbeitete für mich.
ps aux
selbst wird als aufgeführt aux
.
sudo
ist nicht notwendig für ps
und der Befehl schneidet viele der Befehle ab, daher ist es nicht sehr genau. Wenn Sie mit Spalten arbeiten möchten, verwenden Sie awk
es viel besser für diese Aufgabe. In der Tat wäre der genaue Befehlps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
awk
funktionieren sollte.
sudo ps
und ich dachte, awk
wäre zu kompliziert für diese Aufgabe und kam mit raus cut
. Sollten Sie Ihre Antwort nicht mit diesem Code aktualisieren, damit das OP sie akzeptieren kann?
ps
es ist einfach nicht blindlings analysierbar. Ich denke, die einzig sichere Methode ist hier ps -e -o
.
ps -eo command
&ps -eo comm
? Der einzige Unterschied , den ich fand , war incommand
der Ausgabe als solche war:[kthreadd]
während incomm
der Ausgabe als dies:kthreadd
. Bedeutet das etwas?