Respuestas:
Usar -o
bandera
Para enumerar solo sus propios procesos
ps -o command
Para enumerar todos los procesos del sistema
ps -e -o command
Esta no es la única forma de listar comandos, pueden imprimirse con indicadores de línea de comandos o solo como ejecutables (que es lo que command
hace la opción).
De mi comentario a continuación la respuesta:
command, args y cmd todos dan un comando completo. De hecho, man page states command y cmd son alias de args, con las banderas - incluidas. La comunicación solo da el nombre del ejecutable. Los alias a eso son ucmd y ucomm. Leí mal sobre las opciones de AIX, que en realidad se pueden especificar con un formato similar a printf,% a para args,% c para comm
Consulte para man ps
obtener más información sobre el uso y las opciones de formato disponibles
El enfoque programático sería un poco redundante, ya que ps
ya nos proporciona las opciones de formato, pero se puede hacer awk
, lo que es muy útil cuando se trata de resultados en columnas.
ps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
Sin embargo, tenga en cuenta que este código se rompe si el nombre de usuario contiene espacios en blanco, por ejemplo john doe
. Esto se puede modificar con la gsub
función de agregar que eliminará su nombre de usuario de la ps
lista. Sin embargo, si hay varios usuarios conectados al sistema, puede ser difícil borrar todos los nombres de usuario de la salida. Por lo tanto, puede ver que la -o
bandera es mucho más preferida.
Nota al margen, sudo
no es necesario para enumerar todos los procesos conps
comm
es el formato AIX, donde como command
es el formato de estilo GNU estándar. AIX es otro sistema similar a NIX, por lo que esa opción se puede utilizar para la compatibilidad. De lo contrario, no hay diferencia
diff <(ps -eo comm) <(ps -eo command)
y parece que hay bastante ruido allá abajo, ¿puedes aclararlo?
command
, args
y cmd
todos dan el comando completo. De hecho, los estados de la página man command
y cmd
son alias para args
, con las -
banderas incluidas. El comm
da el nombre del exacutable solamente. Los alias a eso son ucmd
y ucomm
. Leí mal acerca de las opciones de AIX, que en realidad se pueden especificar con un formato similar a printf,% a para args,% c para com
Una forma más genérica. Determinamos la columna del comando. De esta manera, no importa para qué interruptores se usen ps
.
ps ax | awk -v p='COMMAND' 'NR==1 {n=index($0, p); next} {print substr($0, n)}'
Salida de muestra
% 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
[…]
¿Y de qué se trata pstree
?
Salida de muestra
% 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}
[…]
Encontré una manera tímida de lograr esto desde aquí
sudo ps aux | rev | cut -d ' ' -f 1 | rev
rev
invierte la salida de ps
y luego cortar puede ayudarlo a delimitar el primer campo (¡que es el último!) y luego invertirlo nuevamente ...
trabajó para mi.
ps aux
sí se enumerará como aux
.
sudo
no es necesario ps
y el comando recorta muchos de los comandos, por lo que no es muy preciso, si desea trabajar con columnas, usarlo awk
es mucho mejor para esa tarea. De hecho, el comando exacto seríaps aux | awk '{ for(i=1;i<=NF;i++) {if ( i >= 11 ) printf $i" "}; printf "\n" }'
awk
debería funcionar.
sudo ps
y pensé awk
que sería demasiado complicado para esta tarea y se me ocurrió cut
. De todos modos, ¿no deberías actualizar tu respuesta con ese código para que el OP pueda aceptarlo?
ps
simplemente no se puede analizar a ciegas. Creo que el único método seguro aquí es ps -e -o
.
ps -eo command
&ps -eo comm
? La única diferencia que encontré fue encommand
la salida era como tal:[kthreadd]
mientras que encomm
la salida era como este:kthreadd
. ¿Esto significa algo?