wait и wait -n: управление несколькими фоновыми задачамиЗапустить процесс в фоне через
& умеют почти все. Проблемы начинаются, когда таких процессов становится несколько и нужно понять, кто завершился и с каким кодом ошибки.▪️Базовый
wait
sleep 2 &
sleep 5 &
wait
echo "Все процессы завершились"
Без аргументов wait ждёт завершения всех фоновых задач текущего shell.▪️Ожидание конкретного процесса
sleep 10 &
pid=$!
wait "$pid"
echo "Процесс завершён"
$! - PID последнего фонового процесса.▪️Зачем нужен
wait -n
Появился в Bash 4.3+ и решает важную задачу: ждать не всех, а первого завершившегося процесса.
sleep 5 &
sleep 2 &
sleep 8 &
wait -n
echo "Кто-то уже завершился"
Скрипт продолжит работу через 2 секунды, а не через 8.▪️Практический сценарий
Параллельная обработка файлов:
for file in *.log; do
gzip "$file" &
done
while wait -n; do
echo "Одна задача завершилась"
done
Так можно реагировать на завершение задач по мере их выполнения, а не ждать самый медленный процесс.▪️Почему это важно
Без
wait Bash может завершить скрипт раньше фоновых процессов. А wait -n позволяет строить простые очереди задач и параллельную обработку без GNU Parallel, Python и других внешних инструментов. Для многих серверных скриптов этого уже достаточно.BashTex 📱 #bash #linux