grep 在 ps aux 中随机出现和消失 (ps aux | grep python)

grep 在 ps aux 中随机出现和消失 (ps aux | grep python)

这不是一个实际的问题 - 但更像是一个奇怪的问题,当我运行时,while true; do ps aux | grep abc; echo done; done我得到以下信息:

user    29733  0.0  0.0  11748   924 pts/1    R+   20:25   0:00 grep --color=auto abc
done
user    29735  0.0  0.0  11748   920 pts/1    S+   20:25   0:00 grep --color=auto abc
done
user    29737  0.0  0.0  11748   924 pts/1    S+   20:25   0:00 grep --color=auto abc
done
done
done
done
user    29745  0.0  0.0  11748   924 pts/1    R+   20:25   0:00 grep --color=auto abc
done
user    29747  0.0  0.0  11748   924 pts/1    R+   20:25   0:00 grep --color=auto abc
done
user    29749  0.0  0.0  11748   924 pts/1    R+   20:25   0:00 grep --color=auto abc
done
user    29751  0.0  0.0  11748   924 pts/1    R+   20:25   0:00 grep --color=auto abc
done
user    29753  0.0  0.0  11748   924 pts/1    S+   20:25   0:00 grep --color=auto abc
done
user    29755  0.0  0.0  11748   924 pts/1    S+   20:25   0:00 grep --color=auto abc
done
done
user    29759  0.0  0.0  11748   924 pts/1    R+   20:25   0:00 grep --color=auto abc
done
user    29761  0.0  0.0  11748   920 pts/1    R+   20:25   0:00 grep --color=auto abc
done

有时grep实际上并没有看到自己ps aux。这只是两个进程运行之间的时间问题吗?当我单独运行命令而不是循环运行命令时,也会发生这种情况。

这种情况在我的计算机和通过 ssh 的另一台计算机上都会发生,但在远程计算机(输出来自该计算机)上发生的频率更高。

乌班图14.04

答案1

正如你提到的,我认为这只是时机。管道上的命令同时运行,您可以找到更多信息 管道命令按什么顺序运行?。如果您的 CPU 较多/较少或进程较多/较少,这种情况可能会在计算机上更频繁地发生。

答案2

这是时间相关的。你几乎总是希望 grep 命令本身成为输出的一部分,特别是当您过滤 ps 并计划杀死结果时;-)

通常的习惯用法/技巧是:

while true; do ps aux | grep [a]bc; echo done; sleep 1; done

这意味着 grep 仍然会找到带有 abc 的任何内容,但 grep 命令本身不会匹配,因为它实际上是“[a]bc”...

如果您使用的是 Linux 或更现代的 Unix

watch -n1 'ps aux | grep [a]bc'

比 while..done 循环短一点

答案3

这确实与时间有关。

如果您不想看到 grep 命令,您可以执行两件事,具体取决于您的用例。

如果您只需要查看 pids,请执行以下操作:

pgrep -l python

如果您需要更多详细信息:

ps aux | grep python | grep -v grep

相关内容