答案 0 :(得分:1)
它正在检查流程管道的返回值,这恰好是该管道中最后一个元素的返回值(除非设置了pipefail
,但通常不是't}) 。 bash
doco可以这样说:
while list-1; do list-2; done
只要列表
while
中的最后一个命令返回退出状态为零,list-2
命令就会连续执行列表list-1
。
在其他地方,它声明:
管道的返回状态是最后一个命令的退出状态
只要while
返回零,这个grep
语句就会继续。 grep
doco表示:
如果选择了一行,则退出状态为0.
因此,只要您正在监控的流程仍然存在, intent 几乎肯定会保持循环。
当然,这是一个相当"片状"检测您的进程是否仍在运行的方法。首先,如果my_pid
等于60
,则grep
如果任何进程60
,602
将返回零,{{ 1}}或3060
正在运行。
如果像往常一样, >重要他们的流程ID。
假设您使用sleep 60
的系统,也许更好的方法是使用以下内容:
sleep 3600
这将解决所有问题,但可以回收进程ID的可能性,以便不同的进程可以在检查之间以相同的PID启动,但是,因为大多数类UNIX系统按顺序分配PID - 这很不可能。