如何在bash中设置异步命令的间隔?

如何在bash中设置异步命令的间隔?

我正在努力实现这个目标

while condition; do

var=value1

### update value every 5s
while sleep 5; do
var=value2
done
### 

 ...
[ rest of code ]

done

这里的问题是脚本总是会进入循环并阻塞其余的代码

答案1

为了实现变量的一定程度的异步设置,需要尝试的一件事是:

#!/usr/bin/env bash

async() {
  while :; do
    # send SIGUSR1 to "parent" script
    kill -USR1 "$1"
    sleep 1
  done
}

# provide PID of script to async
async $$ &
async_pid=$!

declare -i i=0
update() {
  i=42
}

cleanup() {
  kill ${async_pid}
}

trap update USR1
trap cleanup EXIT

echo $i
sleep 2
echo $i

这种方法的一个警告是:如果脚本正在休眠并且发出信号,则update当脚本再次“唤醒”时,该命令仅执行一次。

相关内容