为什么 ps aux | grep返回额外命中

为什么 ps aux | grep返回额外命中

假设我想知道当前正在运行的 kate 编辑器的 PID(kate 只是一个示例,它的工作方式与许多程序的描述相同)。所以,我执行ps aux | grep kate.

这是输出:

seifert     35523  0.0  0.2 448724 25144 ?        Sl   08:56   0:33 /bin/kate -b
seifert   1499179  0.0  0.0  12196   656 pts/0    S+   21:52   0:00 grep --color=auto kate

第一行是我期望看到的。但第二个是什么?

答案1

如果您输入ps aux|grep kate,这将启动grep kate,grep kate将被视为grep kate(或者如果您有一些别名(如本例所示),则更复杂)。并且grep kate会选择对应的行,因为有kate子串。

如果您想kate在 grep 命令之前从进程列表中获取进程,pgrep可以是您需要的命令。

编辑:甚至pgrep pgrep没有发现自己。

答案2

这是因为它为您正在搜索的进程和您刚刚输入的命令返回一行:grep kate

因此,如果您只想得到一个响应,请使用以下命令:

ps -fp $(pgrep -f '<your_search>')

pgrep -f根据进程的启动完整命令(包括参数)搜索进程的 PID。

答案3

引用韦恩·维尔纳的回答:

通过在字母周围加上方括号,在字符串周围加上引号,您可以搜索正则表达式,即“查找字符 'f' 后跟 'nord'”。但由于您将方括号放在模式中,“f”现在后面跟着“]”,因此 grep 将不会显示在结果列表中。尼托!

使用 [f] 我没有在输出右差异中得到 grep 命令的最后一行:beetwen "ps aux | grep firefox" 和 "ps aux | grep [f]irefox" 是最后一个输出行

如何防止“grep”出现在 ps 结果中?

如果您不想这样,请参阅ps aux | grep 'kate'您可以使用的进程列表中的最后一个 grep 命令,例如进程/命令

ps aux | grep '[k]ate'

[]您可以在搜索的每个命令/进程中使用此括号

ps aux | grep '[c]ommand' or '[p]rocess'

您还可以使用, 仅获取 pid

pidof kate

或者

pgrep kate

或者

ps -ef | grep [k]ate

相关内容