184 votes

Plus élégant "ps aux | grep -v grep"

Lorsque je vérifie la liste des processus et que j'extrais par grep ceux qui m'intéressent, la liste des processus est la suivante grep lui-même est également inclus dans les résultats. Par exemple, pour lister les terminaux :

$ ps aux  | grep terminal
user  2064  0.0  0.6 181452 26460 ?        Sl   Feb13   5:41 gnome-terminal --working-directory=..
user  2979  0.0  0.0   4192   796 pts/3    S+   11:07   0:00 grep --color=auto terminal

Normalement, j'utilise ps aux | grep something | grep -v grep pour se débarrasser de la dernière entrée... mais ce n'est pas élégant :)

Avez-vous un hack plus élégant pour résoudre ce problème (à part envelopper toutes les commandes dans un script séparé, ce qui n'est pas mal non plus).

4 votes

Pour ce que cela vaut, il s'agit d'une ancienne FAQ. Voir le point 3.10 à faqs.org/faqs/unix-faq/faq/part3

1 votes

Merci pour la référence. C'est leur méthode : ps ux | awk '/name/ && !/awk/ {print $2}'

0 votes

Quel est le grep -v grep partie en cours ?

5voto

Johan Walles Points 334

Clause de non-responsabilité : Je suis l'auteur de cet outil, mais...

J'utiliserais px :

~ $ px atom
  PID COMMAND          USERNAME   CPU RAM COMMANDLINE
14321 crashpad_handler walles   0.01s  0% /Users/walles/Downloads/Atom.app/Contents/Frameworks/Electron Framework.framework/Resources/crashpad_handler --database=
16575 crashpad_handler walles   0.01s  0% /Users/walles/Downloads/Atom.app/Contents/Frameworks/Electron Framework.framework/Resources/crashpad_handler --database=
16573 Atom Helper      walles    0.5s  0% /Users/walles/Downloads/Atom.app/Contents/Frameworks/Atom Helper.app/Contents/MacOS/Atom Helper --type=gpu-process --cha
16569 Atom             walles   2.84s  1% /Users/walles/Downloads/Atom.app/Contents/MacOS/Atom --executed-from=/Users/walles/src/goworkspace/src/github.com/github
16591 Atom Helper      walles   7.96s  2% /Users/walles/Downloads/Atom.app/Contents/Frameworks/Atom Helper.app/Contents/MacOS/Atom Helper --type=renderer --no-san

En dehors de la recherche de processus avec une interface de ligne de commande intelligente, il fait également beaucoup d'autres choses utiles, plus de détails sur la page du projet .

Fonctionne sur Linux et OS X, facile à installer :

curl -Ls https://github.com/walles/px/raw/python/install.sh | bash

3voto

auntchilada Points 39

L'utilisation de parenthèses pour entourer un caractère dans le modèle de recherche exclut l'élément suivant grep puisqu'il ne contient pas l'expression rationnelle correspondante.

$ ps ax | grep 'syslogd'
   16   ??  Ss     0:09.43 /usr/sbin/syslogd
18108 s001  S+     0:00.00 grep syslogd

$ ps ax | grep '[s]yslogd'
   16   ??  Ss     0:09.43 /usr/sbin/syslogd

$ ps ax | grep '[s]yslogd|grep'
   16   ??  Ss     0:09.43 /usr/sbin/syslogd
18144 s001  S+     0:00.00 grep [s]yslogd|grep

0voto

tripleee Points 28746

En fonction du cas d'utilisation final, il est souvent préférable de préférer Awk.

ps aux | awk '/[t]erminal/'

C'est particulièrement vrai lorsque vous avez quelque chose comme

ps aux | grep '[t]erminal' | awk '{print $1}'  # useless use of grep!

où évidemment la regex peut être intégrée dans le script Awk de manière triviale :

ps aux | awk '/[t]erminal/ { print $1 }'

Mais vraiment, ne réinvente pas ça toi-même. pgrep et ses amis existent depuis longtemps et gèrent cet espace de problèmes bien mieux que la plupart des réimplémentations ad hoc.

-3voto

Une autre option consiste à modifier votre .bash_profile (ou tout autre fichier dans lequel vous conservez les alias bash) pour créer une fonction qui extrait 'grep' des résultats.

function mygrep {
grep -v grep | grep --color=auto $1
}

alias grep='mygrep'

El grep -v grep doit être le premier, sinon votre --color=auto ne fonctionne pas pour une raison quelconque.

Cela fonctionne si vous utilisez bash ; si vous utilisez un autre shell, c'est à votre discrétion.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X