更优雅的“ps aux |” grep -v grep“
当我检查进程列表并“grep”出对我有意思的内容时, grep
本身也包含在结果中。 例如,要列出terminal:
$ 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
通常我使用ps aux | grep something | grep -v grep
ps aux | grep something | grep -v grep
ps aux | grep something | grep -v grep
摆脱最后一项…但它不是优雅 🙂
你有一个更优雅的黑客来解决这个问题(除了包装所有的命令到一个单独的脚本,这也是不错的)
通常的技术是这样的:
ps aux | egrep '[t]erminal'
这将匹配包含terminal
,其中egrep '[t]erminal'
不! 它也适用于Unix的许多口味。
使用pgrep 。 这更可靠。
这个答案build立在一个先前的pgrep
答案 。 它也build立在另一个结合使用ps
和pgrep
答案上 。 这里有一些相关的训练实例:
$ 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]
以上可以作为一个function使用:
$ 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
与使用ps
和grep
比较 有用的标题行不会被打印:
$ ps aux | grep [s]shd root 1902 0.0 0.1 82560 3580 ? Ss Oct20 0:00 /usr/sbin/sshd -D
你可以在ps命令中进行过滤,例如
ps u -C gnome-terminal
(或通过查找 / proc 查找等)
另一个select :
ps -fC terminal
这里的选项:
-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.
使用括号来包围search模式中的字符,排除了grep
进程,因为它不包含匹配的正则expression式。
$ 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
免责声明:我是这个工具的作者,但…
我会用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
除了使用明智的命令行界面来查找进程之外,它还做了很多其他有用的事情, 在项目页面上有更多的细节。
适用于Linux和OS X,轻松安装:
curl -Ls https://github.com/walles/px/raw/python/install.sh | bash
另一个select是编辑你的.bash_profile
(或其他你保存bash别名的文件)来创build一个greps'grep'结果的函数。
function mygrep { grep -v grep | grep --color=auto $1 } alias grep='mygrep'
grep -v grep
必须是第一的,否则你的--color=auto
将不能工作。
如果你使用bash的话,这将起作用。 如果你使用不同的shell YMMV。