Ваша проблема состоит в том, что Вы спите для фиксированного количества времени после того, как Вы запускаете свою программу, не принимая к соображению количество времени, которое протекло с прошлого раза Вы спали.
Можно сделать, это - удар или любой другой язык программирования, но ключ должен использовать часы для определения, сколько времени запланировать следующий сон. Передо сном проверьте часы, посмотрите, сколько времени Вы уехали, и сон различие.
Из-за компромиссов диспетчеризации процессов Вы, как гарантируют, не проснетесь прямо на такте системных часов, но необходимо быть довольно близкими (в некоторых мс, разгруженный, или в нескольких сотнях мс при загрузке). И Вы не будете накапливать ошибку со временем, потому что каждый раз Вы ресинхронизируете на каждом цикле сна и удаляете любую накопленную ошибку.
Если необходимо поразить такт системных часов точно, то то, что Вы ищете, является операционной системой реального времени, которые разработаны точно с этой целью.
Необходимо заменить следующую строку:
if (($loss_mid < $threshold)); then
Этим:
if [ "$loss_mid" -lt "$threshold" ]; then
$threshold
должна быть числовая переменная. справедливое замечание – 08.04.2013, 21:51