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
没有输出。
答案 0 :(得分:2)
您可以使用pgrep
。它可以在大多数现代Linux和Unix系统上使用(在OSX上通过home brew
提供):
pgrep -fl "$1"
答案 1 :(得分:1)
所以问题是你运行ps aux | grep sshd
和grep
之类的东西最终会在进程列表中找到它自己?有一个简单的方法可以解决这个问题,即将一个字符括在括号中:
ps aux | grep ssh[d]
括号被shell展开,因此grep
甚至看不到它们,但它们仍然是命令行的一部分,所以它不包含字符串sshd
。
答案 2 :(得分:1)
谢谢@DavidW:我还在使用旧的OSX 10.6.8
Snow Leopard与pgrep
和pill
类似的命令killall。在很多方面,killall
优于pgrep
和pkill
,但使用起来也有点复杂。
其中一个参数是-s
参数,它只会显示它会做什么。
killall
的主要问题是,如果你不小心它会杀人:
$ killall -s $command
kill -TERM 2193
kill -TERM 32832