为什么 "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
中。
我很难理解 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
中。