Bash - 什么是while -process-checking

时间:2017-09-14 14:38:38

标签: bash

我看到here使用了:

  

而ps | grep" $ my_pid"

问题:在这种语法while -command-中,什么是while循环检查,返回命令或stdout的代码?

1 个答案:

答案 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如果任何进程60602将返回零,{{ 1}}或3060正在运行。

如果像往常一样, >重要他们的流程ID。

假设您使用sleep 60的系统,也许更好的方法是使用以下内容:

sleep 3600

这将解决所有问题,但可以回收进程ID的可能性,以便不同的进程可以在检查之间以相同的PID启动,但是,因为大多数类UNIX系统按顺序分配PID - 这很不可能。