Saturday, December 23, 2006

 

Hint [10]

[10] Все мы с пеленок знаем, что & значит запустить программу в фоновом режиме, но лично у меня случаи, когда такая форма запуска является оправданной встречаются редко. Хотя недавно я "открыл для себя" один из классов таких случаев - какие-либо действия с сетью, которые сами по себе не ресурсоемки, но могут выполняться долго вследствие больших таймаутов.

Вот так я проверяю список хвостов на "пингуемость":


cat proxies | (IFS=":\n"; while read ip port; do (if ping -w 1 -c 1 -q $ip>/dev/null; then echo "$ip:$port"; else echo "bad: $ip:$port"; fi)& done;) | tee proxies_pingable


В данном случае я запускаю в фоне сабшелл (if ping -w 1 -c 1 -q $ip>/dev/null; then echo "$ip:$port"; else echo "bad: $ip:$port"; fi), потому скрипт приступает к пингу следующего хоста, не дожидаясь, когда завершится проверка предыдущего. Выигрыш по времени пропорционален количеству хостов - если их 100, то практически стократный!
Правда, нужно быть аккуратным - если в списке 10 тысяч хостов, то это будет уже больше похоже на DoS.

Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?