GNU/Linux >> Linux Esercitazione >  >> Linux

C'è un modo per selezionare diverse condizioni in `ps`?

ps è fastidioso in questo modo. Fortunatamente, c'è pgrep , che ha opzioni di selezione simili, ma richiede che tutti corrispondano e quindi restituisce i pid corrispondenti. Di default ne emette uno per riga, ma può essere richiesto di utilizzare un delimitatore diverso in modo che funzioni con ps :

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

Purtroppo ps può solo deselezionare, non sembra esserci un and operatore o la possibilità di aggiungere perfezionamenti.

Puoi richiedere l'aiuto di pgrep per ottenere un elenco di PID e inviarlo a ps però. Ad esempio:

$ 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 non ha filtri molto flessibili. Fai in modo che visualizzi più di quanto ti serve, specifica il formato in modo esplicito e filtra l'output. Awk funzionerà spesso bene per questo compito.

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

I segni di uguale dopo i nomi delle colonne sopprimono la riga dell'intestazione. Se vuoi vedere le righe di intestazione, fai in modo che il filtro stampi la prima riga invariata:

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

Se desideri eseguire un'elaborazione automatizzata, dovrai ridurre i dati solo ai PID.

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

Linux
  1. DHCP:un modo per controllare lo stato del pool DHCP?

  2. C'è un modo per ottenere da gcc l'output binario grezzo?

  3. C'è un modo per ritagliare un file NETCDF?

  4. C'è un modo per riprendere uno scp interrotto di un file?

  5. C'è un modo per copiare il testo in htop?

C'è un modo per convertire da UTF8 a ISO-8859-1?

C'è un modo per rinominare un progetto Cargo?

C'è un modo per avviare vim in modalità di sola lettura

C'è un modo per riavviare i badblock?

C'è un modo per ascoltare il processo?

C'è un modo per monitorare /dev/random?