GNU/Linux >> Tutoriales Linux >  >> Linux

¿Hay alguna forma de seleccionar por varias condiciones en `ps`?

ps es molesto de esa manera. Afortunadamente, hay pgrep , que tiene opciones de selección similares, pero requiere que todas coincidan y luego genera los pid coincidentes. De forma predeterminada, genera uno por línea, pero se le puede pedir que use un delimitador diferente para que funcione con ps :

ps -f -p"$(pgrep -d, -u $USER -P 1)"

Desafortunadamente ps solo puede anular la selección, no parece haber un and operador o la capacidad de agregar refinamientos.

Puede solicitar la ayuda de pgrep para obtener una lista de PID y enviarla a ps sin embargo. Por ejemplo:

$ ps -f $(pgrep -P 1 -u saml)
UID        PID  PPID  C STIME TTY      STAT   TIME CMD
saml      1986     1  0 Jul25 ?        SLl    0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
saml      2003     1  0 Jul25 ?        S      0:00 dbus-launch --sh-syntax --exit-with-session
saml      2004     1  0 Jul25 ?        Ss     0:23 /bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
saml      2147     1  0 Jul25 ?        S      0:04 /usr/libexec/gconfd-2
saml      2156     1  0 Jul25 ?        Ssl    0:09 /usr/libexec/gnome-settings-daemon
saml      2162     1  0 Jul25 ?        S      0:00 /usr/libexec/gvfsd
saml      2178     1  0 Jul25 ?        Ssl    0:01 /usr/bin/pulseaudio --start --log-target=syslog
saml      2180     1  0 Jul25 ?        Ssl    0:04 /usr/libexec//gvfs-fuse-daemon /home/saml/.gvfs
saml      2191     1  0 Jul25 ?        S      0:12 syndaemon -i 0.5 -k
saml      2193     1  0 Jul25 ?        S      0:00 /usr/libexec/gvfs-gdu-volume-monitor

ps no tiene filtros muy flexibles. Haz que muestre más de lo que necesitas, especifica el formato explícitamente y filtra la salida. Awk a menudo funcionará bien para esta tarea.

ps -o pid= -o ppid= -o user= -o comm= -o args= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid'

Los signos de igual después de los nombres de las columnas suprimen la línea de encabezado. Si desea ver las líneas de encabezado, haga que el filtro imprima la primera línea sin cambios:

ps -o pid -o ppid -o user -o comm -o args |
awk -v uid="$(id -un myuser)" 'NR == 1 || ($2 == 1 && $3 == uid)'

Si desea realizar un procesamiento automatizado, deberá reducir los datos solo a los PID.

ps -o pid= -o ppid= -o user= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid {print $1}'

Linux
  1. Dhcpd:¿Alguna forma de verificar el estado del grupo Dhcp?

  2. ¿Hay alguna manera de hacer que gcc genere binarios sin formato?

  3. ¿Hay alguna forma de recortar un archivo NETCDF?

  4. ¿Hay alguna manera de iniciar vim en modo de solo lectura?

  5. ¿Hay alguna manera de reanudar un scp interrumpido de un archivo?

¿Hay alguna forma de convertir de UTF8 a ISO-8859-1?

¿Hay alguna forma de cambiar el nombre de un proyecto Cargo?

¿Hay alguna manera de reiniciar badblocks?

¿Hay alguna manera de limitar el consumo total de CPU?

¿Hay alguna manera de volcar la información de CPUID de una CPU?

¿Hay alguna forma de monitorear /dev/random?