while 循环杀死背景

while 循环杀死背景

我有一个 while 循环充当秒表,我想在脚本中实现它来计算命令运行所需的时间,我想在命令完成后杀死它

date1=`date +%s`; while true; do 
   echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
done &

我需要终止脚本内的这个循环

我试过

    1-jobs but it gives me no output
    2-kill $! but give me erro

但循环继续运行

答案1

使用包timeout中提供的命令coreutils

NAME

   timeout - run a command with a time limit

SYNOPSIS
   timeout [OPTION] DURATION COMMAND [ARG]...
   timeout [OPTION]

DESCRIPTION
   Start COMMAND, and kill it if still running after DURATION.

答案2

刚刚遇到了同样的问题,但背景不同!

让 while 循环成为一个函数,并在调用它后立即获取它的 PID,并用该变量杀死它!

function loopToKill() { # while loop inside a function
   while true; do 
      echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
      sleep 1 # gotta have a sleep unless you want it to go crazy in the terminal
   done 
}

date1=`date +%s`
loopToKill &    # run in background
loopPID=$!      # get pid

# wait for whatever you needed

kill loopPID    # here's where it get's cool

上面你可以在需要的时候杀死它,但这一切都是为了等待你需要的东西。这是适合我的情况的最佳解决方案,无论我的过程花费多长时间,我都会有一个旋转器。这是我自己的情况,但如果您需要在整个过程中保持计时器持续运行,那么这就是您所需要的。

另一个很酷的事情是使用输入来杀死它,这需要更多的挖掘,我目前正在研究它是为了好玩,但除了读到它们有风险之外,对 bash 中的用户输入不太了解。祝你好运,如果有帮助的话请给我点赞!

相关内容