为什么 wc 从 ps 输出得到错误的结果

为什么 wc 从 ps 输出得到错误的结果

将所有行输出到文件中/tmp/ps.txt

$ ps -e >/tmp/ps.txt    

用 wc -l 来计数

$ wc -l /tmp/ps.txt
172

无需导出文件即可对其进行计数。

$ ps -e | wc -l
173

为什么ps -e | wc -l 要多加一根线呢?

我不认为ctrl-d 有正确的解释对于我的问题。

$ echo "test" | wc -l
1

请在你的终端中尝试一下,它会产生 2 作为ctrl-d 会说

答案1

额外的一行是正在运行的 wc 程序。它与 ps 同时执行,而不是之后执行。

答案2

ctrl-d 的答案是正确的。

您似乎不明白该ps命令是什么为了。它列出了您系统上的进程。

当您运行该ps命令时,该正在运行的实例本身是一个过程。

当你运行wc命令时,这也是一个过程。

如果你cat在管道中添加一些命令,那么每个命令也是一个进程,每个命令都会导致ps多输出一行信息:

[vagrant@localhost ~]$ ps | wc -l
4
[vagrant@localhost ~]$ ps | cat | wc -l
5
[vagrant@localhost ~]$ ps | cat | cat | wc -l
6
[vagrant@localhost ~]$ ps | wc -l
4
[vagrant@localhost ~]$ ps
  PID TTY          TIME CMD
22912 pts/0    00:00:00 bash
29651 pts/0    00:00:00 ps
[vagrant@localhost ~]$ 

显示“1”的事实echo "test" | wc -l是完全无关的。

相关内容