Plus élégant " ps aux / grep - v grep"
Quand je vérifie la liste des processus et "grep" ceux qui sont intéressants pour moi, le 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 il n'est pas élégant :)
Avez-vous un hack plus élégant pour résoudre ce problème (à part envelopper toute la commande dans un script séparé, ce qui n'est pas mal non plus)
8 réponses
La technique habituelle est la suivante:
ps aux | egrep '[t]erminal'
Cela correspond aux lignes contenant terminal
, ce qui n'est pas le cas de egrep '[t]erminal'
! Il travaille également sur beaucoup saveurs D'Unix.
Cette réponse s'appuie sur un avant pgrep
réponse. Il s'appuie également sur un autre réponse combinant l'utilisation de ps
avec pgrep
. Voici quelques exemples de formation pertinents:
$ pgrep -lf sshd
1902 sshd
$ pgrep -f sshd
1902
$ ps up $(pgrep -f sshd)
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1902 0.0 0.1 82560 3580 ? Ss Oct20 0:00 /usr/sbin/sshd -D
$ ps up $(pgrep -f sshddd)
error: list of process IDs must follow p
[stderr output truncated]
$ ps up $(pgrep -f sshddd) 2>&-
[no output]
Ce qui précède peut être utilisé comme une fonction :
$ psgrep() { ps up $(pgrep -f $@) 2>&-; }
$ psgrep sshd
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1902 0.0 0.1 82560 3580 ? Ss Oct20 0:00 /usr/sbin/sshd -D
Comparer avec l'utilisation de ps
avec grep
. La ligne d'en-tête utile n'est pas imprimée:
$ ps aux | grep [s]shd
root 1902 0.0 0.1 82560 3580 ? Ss Oct20 0:00 /usr/sbin/sshd -D
Vous pouvez filtrer dans la commande ps, par exemple
ps u -C gnome-terminal
(ou recherchez dans / proc avec find etc.)
Un plus alternative:
ps -fC terminal
Voici les options:
-f does full-format listing. This option can be combined
with many other UNIX-style options to add additional
columns. It also causes the command arguments to be
printed. When used with -L, the NLWP (number of
threads) and LWP (thread ID) columns will be added. See
the c option, the format keyword args, and the format
keyword comm.
-C cmdlist Select by command name.
This selects the processes whose executable name is
given in cmdlist.
L'utilisation de crochets pour entourer un caractère dans le modèle de recherche exclut le processus grep
car 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
Avertissement: je suis l'auteur de cet outil, mais...
Je voudrais utiliser 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
Sauf pour trouver des processus avec une interface de ligne de commande sensible, il fait aussi beaucoup d'autres choses utiles, plus de détails sur la page du projet.
Fonctionne sur Linux et OS X, facilement installé:
curl -Ls https://github.com/walles/px/raw/python/install.sh | bash
Une autre option consiste à modifier votre .bash_profile
(ou tout autre fichier dans lequel vous conservez des alias bash) pour créer une fonction qui grep 'grep' hors des résultats.
function mygrep {
grep -v grep | grep --color=auto $1
}
alias grep='mygrep'
Le grep -v grep
doit être le premier sinon votre --color=auto
NE FONCTIONNERA PAS pour une raison quelconque.
Cela fonctionne si vous utilisez bash; si vous utilisez un shell différent YMMV.