Yve*_*ves 1 bash process sleep
我正在我的 Ubuntu 上编写一个名为如下的bash脚本:test.sh
#!/bin/bash
while true; do
echo 'abc' # pwd, df...
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
当我./test.sh在一个终端执行时,我打开另一个终端来执行以下命令:
$ pgrep test
31110
$ ps -ef | grep sleep
me 31140 31110 0 20:58 pts/1 00:00:00 sleep 1
me 31142 16389 0 20:58 pts/0 00:00:00 grep --color=auto sleep
$ ps -ef | grep sleep
me 31146 31110 0 20:58 pts/1 00:00:00 sleep 1
me 31148 16389 0 20:58 pts/0 00:00:00 grep --color=auto sleep
$ ps -ef | grep sleep
me 31150 31110 0 20:58 pts/1 00:00:00 sleep 1
me 31152 16389 0 20:58 pts/0 00:00:00 grep --color=auto sleep
Run Code Online (Sandbox Code Playgroud)
所以,进程的PID./test.sh是31110,当我执行命令时ps -ef | grep sleep,我得到许多进程sleep 1(PID是31140,,31146... 31150),它们都是该进程的子进程./test.sh。
好吧,现在看来我可以理解一切, 的子进程sleep 1来自 的循环while true。
然而,当我尝试时ps -ef | grep echo,我什么也没得到。我还尝试执行其他命令,例如pwd, df,但它们也无法grep编辑。
所以我的问题是为什么该命令sleep是一个独立的进程而其他命令不是。
这里有两个方面需要考虑:
echo并且pwd确实不能显示为独立进程,因为它们是bashshell 的内置命令(请参见type echo例如的输出 - 但请注意,它们很好地可以实现为外部可执行文件,并且什么是或不是作为内置或外部程序实现的确实有所不同从外壳到外壳)。df)的命令是独立的进程,但它们通常完成得如此之快,以至于您将很难用 , “捕获”它们ps(即,它们在ps启动时已经完成并为这个原因不会出现在输出中)。| 归档时间: |
|
| 查看次数: |
1442 次 |
| 最近记录: |