为什么 "echo" 没有出现在 "ps" 中?

Why doesn't "echo" show up in "ps"?

我很难理解 ps 命令中显示的内容。为了测试我的理解,我在下面创建了虚拟脚本

 #!/bin/bash
 for i in {1..100000}
 do
  date -u
  date -u
  date -u
 done

而运行这个脚本我打开一个新的终端并重复执行

ps -eaf | grep date | grep -v grep

并且我能够在输出中确定进程的日期。

我后来更改了虚拟脚本,将 date -u 替换为 echo "what is going on"

     #!/bin/bash
     for i in {1..100000}
     do
      echo "What is going on"
      echo "What is going on"
      echo "What is going on"
     done

在运行更新虚拟脚本的同时,我打开一个新的终端并重复执行

ps -eaf | grep echo | grep -v grep

并且回声从未显示在输出中。为什么是这样?我怀疑原因是脚本是 bash 脚本,可能是它使用内置 echo 因此它没有显示在 ps 输出中。我对么?我在这里错过了什么?

echo 是 bash 中的内置函数:

$ type echo
echo is a shell builtin

这意味着当echo为运行时,不会创建新进程。所有工作都由 bash 进程完成,效率更高。

您可以 运行 非内置 echo 显式:

command echo "What is going on"

这会分叉并执行 /bin/echo,让它出现在 ps 中。