원래 코드에 조금 더 가깝게 유지하려면 내가하는 일은 다음과 같습니다.
while true; do
sleep 1 &
...your stuff here...
wait # for sleep
done
이것은 의미를 약간 변경합니다. 만약 당신의 물건이 1 초도 걸리지 않았다면, 그것은 1 초가 지나기를 기다릴 것입니다. 그러나 어떤 이유로 든 물건이 1 초 이상 걸리는 경우 끝없는 결코 더 많은 하위 프로세스를 생성하지 않습니다.
따라서 백그라운드에서가 아니라 병렬로 작업하지 않으므로 변수도 예상대로 작동합니다.
추가 백그라운드 작업을 시작하는 경우 프로세스를 구체적으로 wait
대기하기 만하도록 지시를 변경해야합니다 sleep
.
더 정확해야하는 경우 시스템 시계와 동기화하고 전체 초 대신 ms를 절전 모드로 전환하면됩니다.
시스템 시계와 동기화하는 방법? 정말 어리석은 시도 :
태만:
while sleep 1
do
date +%N
done
출력 : 003511461 010510925 016081282 021643477 028504349 03 ... (계속 증가)
동기화 됨 :
while sleep 0.$((1999999999 - 1$(date +%N)))
do
date +%N
done
출력 : 002648691 001098397 002514348 001293023 001679137 00 ... (유지)