我很难理解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
并且输出中从未显示过echo。为什么是这样?我怀疑原因是脚本是一个bash脚本,可能是它使用内置echo,因此它没有显示在ps输出中。我对么?我在这里错过了什么?
答案 0 :(得分:7)
echo
是bash内置的:
$ type echo
echo is a shell builtin
这意味着在运行echo
时不会创建新进程。所有工作都由bash
流程完成,这样做效率更高。
您可以明确地运行非内置echo
:
command echo "What is going on"
这个分支和执行/bin/echo
代替,让它显示在ps
中。