使用grep过滤进程

时间:2014-02-10 19:18:52

标签: linux

root      1626     1  0 04:49 ?        00:00:00 /usr/sbin/sshd
USERNAME    5133  5038  0 14:12 pts/0    00:00:00 /bin/bash ./find_proc.sh sshd
USERNAME  5137  5133  0 14:12 pts/0    00:00:00 grep sshd

我如何使用grep过滤底部的进程?

ps -ef | grep "$1"  

是什么让我输出。我知道你需要使用grep -v来过滤它,但是我不确定它的顺序。它需要一个$ 1的参数。所以我在终端的输入是./script_file sshd来获取上面的输出。有什么建议?

ps -ef | grep "$1" | grep -v grep  

没有输出。

3 个答案:

答案 0 :(得分:2)

您可以使用pgrep。它可以在大多数现代Linux和Unix系统上使用(在OSX上通过home brew提供):

pgrep -fl "$1"

答案 1 :(得分:1)

所以问题是你运行ps aux | grep sshdgrep之类的东西最终会在进程列表中找到它自己?有一个简单的方法可以解决这个问题,即将一个字符括在括号中:

ps aux | grep ssh[d]

括号被shell展开,因此grep甚至看不到它们,但它们仍然是命令行的一部分,所以它不包含字符串sshd

答案 2 :(得分:1)

  

谢谢@DavidW:我还在使用旧的OSX 10.6.8

Snow Leopard与pgreppill类似的命令killall。在很多方面,killall优于pgreppkill,但使用起来也有点复杂。

其中一个参数是-s参数,它只会显示它会做什么。

killall的主要问题是,如果你不小心它会杀人:

$ killall -s $command
kill -TERM 2193
kill -TERM 32832