Ubuntu gnome 终端中的 PID

noo*_*rup 0 command-line process ps

通过使用ps aux | grep -i “name of your desired program”出现的 PID 列表,但我发现了比系统监视器中更多的 PID。

这怎么可能?

我没有-color =auto在系统监视器中找到 PID 。

mur*_*uru 6

当您运行 时ps ... | grep ...psgrep一起启动,并且 的输出异步ps馈送grep。因此,当ps扫描进程列表并打印输出时,该grep进程也处于活动状态,并且输出也ps包括 grep进程。

现在,如果你做一个简单的grep foo,输出ps将包含grep foo,并且grep将匹配的是 foo

$ ps aux | grep non-existent
muru  19042  0.0  0.0  10760  2224 pts/8    S+   23:56   0:00 grep non-existent
Run Code Online (Sandbox Code Playgroud)

显然,没有名为non-existent.

相反的ps | grep使用pgrep更清洁的匹配

pgrep foo
Run Code Online (Sandbox Code Playgroud)

或者ps它本身,如果您知道命令的名称:

ps -C foo
Run Code Online (Sandbox Code Playgroud)

为什么grep --color...?因为 Ubuntugrep默认定义了一个别名:

$ alias grep
alias grep='grep --color=auto'
Run Code Online (Sandbox Code Playgroud)

这也是为什么您会看到以下愚蠢的技巧:

ps ... | grep foo | grep -v grep
ps ... | grep '[f]oo'
Run Code Online (Sandbox Code Playgroud)