Function ash我如何处理Annie-wile循环?

Function ash我如何处理Annie-wile循环?,function,while-loop,kill-process,busybox,ash,Function,While Loop,Kill Process,Busybox,Ash,我正在使用运行OpenWrt的路由器,因此我可以运行/bin/sh脚本,并且所有脚本都在BusyBox v1.28.4()内置shell(ash)下运行 我正在编写一个脚本,默认情况下,在第一个while\u loop,当这个循环开始时,会调用一些额外的函数,在这个函数中的一个函数中,我必须设置第二个while\u loop。 引导循环是由时间决定的,也许我的方法不是最好的,但是基于我有限的知识。也许还有另一个最好的方法来做“睡眠循环” 问题是,我不知道如何在再次启动第二个之前终止/终止第二个。

我正在使用运行OpenWrt的路由器,因此我可以运行
/bin/sh
脚本,并且所有脚本都在
BusyBox v1.28.4()内置shell(ash)下运行

我正在编写一个脚本,默认情况下,在第一个
while\u loop
,当这个循环开始时,会调用一些额外的函数,在这个函数中的一个函数中,我必须设置第二个
while\u loop
。 引导循环是由时间决定的,也许我的方法不是最好的,但是基于我有限的知识。也许还有另一个最好的方法来做“睡眠循环”

问题是,我不知道如何在再次启动第二个
之前终止/终止第二个
。
假设在第一次运行之后,所有函数都朝着正确的方向运行,所以我的条件是两个循环都在执行中,现在假设在某些条件下,第一个循环必须再次运行所有函数。。。但是第二个循环已经加载,必须在再次启动之前终止。
你怎么能这么做

这是我正在研究的一个小例子,如果我成功了,我可以将所有内容转移到更大的脚本中

#!/bin/sh

first_sleep=111
second_sleep=222

another_sleep () {
    while :; do
        echo "this's the second loop of $second_sleep seconds"
        sleep $second_sleep
    done
}

while :; do
    echo "this' the first loop of $first_sleep seconds"
    echo "running the new function"
    another_sleep & echo $!
    sleep $first_sleep
done
正如你所看到的,我尝试了
&echo$
获取第二个循环的pid,但工作方式与预期不同

root@OpenWrt:~# ./test.sh
this' the first loop of 111 seconds
running the new function
1181
this's the second loop of 222 seconds
但是当脚本开始时,我得到了3个不同的PID

有什么想法吗?如果您认为这是一种糟糕的处理方式,我可以从头重写它,但请记住,我需要一个定时器控制所有这两个函数,并且我不能使用cron