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의 사용자 입력에 대해 많이 알지 못합니다. 행운을 빕니다. 도움이 되었다면 좋아요를 눌러주세요!

관련 정보