1

现在我正在运行一些带有 bash 脚本的程序(使用 Cygwin)。

基本上我正在做的是在程序启动后,运行一个循环来检查程序是否仍在运行。

我在做:

while true
do
    if [ "$(ps -W | grep -w name | gawk '{print $8,$9}' | gawk -F \\ '{print $4}')" == 'program' ];then 
        sleep 1
    else
        "start program" (whatever is needed here)
    fi
done

但是我开始意识到多次使用这样的脚本只会导致使用不必要的系统资源。

我试着做一个 if then, elif,但它永远不会超过第一个 if。

我需要它去“好吧,如果第一个是否定的,尝试下一个,走到最后,重新开始”。

这是我的脚本的副本,我忘了说我使用的是 Cygwin,但这并没有改变任何东西,因为它似乎仍然使用普通的 bash 脚本,只是可能不同的路径来启动文件。http://pastebin.com/s8ZdPQMn是的 h。不在那里我似乎无法编辑pastebin。

我的总体计划是检查第一个 SRPro 是否正在运行,检查下一个,等等,只有在检测到一个没有运行时才触发。

编辑:我解决了。不完全确定为什么,但在我每个程序的原始单个文件中,gawk 最后打印 4 美元给了我想要的东西,但由于某种原因,当这样做时,它变成了 5 美元。因此将 $4 更改为 $5 使脚本工作。

编辑:一个非常奇怪的问题是,它会连续工作几分钟,然后有时会突然感到困惑,并启动一个程序或其他东西的 7 个副本。它也可以是随机开始的。

4

1 回答 1

1

您可能会发现该wait命令(help wait从 bash 提示符尝试)很有用。目前尚不清楚您到底想要什么,但作为示例,这是一个基本的重生函数:

$ respawn () {
>   while true
>   do
>     "${@}" &
>     wait ${!}
>     echo "respawning ..."
>   done
> }
$ respawn some_program arg1 arg2 etc
于 2012-11-16T07:08:00.070 回答