Ps

為什麼 wc 從 ps 的輸出中得到錯誤的結果

  • February 4, 2017

將所有行輸出到文件中/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 所說的那樣

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完全無關緊要。

額外的行是正在執行的 wc 程序。它與 ps 同時執行,而不是在那之後。

引用自:https://unix.stackexchange.com/questions/336143