Когда ты запускаешь десятки фоновых задач - важно не просто кидать их в фон через &, а управлять их приоритетом, нагрузкой и порядком выполнения.
💎 Используем:
nice - задаем приоритет (-20 самый высокий, 19 - самый низкий)
wait - ждем завершения задач
& - фоновый запуск
массив - очередь
🛠 Пример: динамическая очередь с приоритетами
#!/bin/bash
declare -a QUEUE=(
"sleep 5" # низкий приоритет
"sleep 2" # высокий приоритет
"sleep 4"
)
declare -a PRIORITY=(
10 # nice +10 → ниже приоритет
-5 # nice -5 → выше приоритет
0
)
for i in "${!QUEUE[@]}"; do
echo "[*] Запуск: ${QUEUE[$i]} с приоритетом ${PRIORITY[$i]}"
nice -n "${PRIORITY[$i]}" bash -c "${QUEUE[$i]}" &
done
wait
echo "[+] Все задачи завершены"
❓ Что это даёт?
📍 Задачи с низким приоритетом будут уступать CPU
📍 Высокоприоритетные задачи получат преимущество при выполнении
📍 wait гарантирует, что мы дождёмся всех процессов
▪️ Расширение: Добавь ограничение количества параллельных задач:
MAX_PARALLEL=3
PIDS=()
for i in "${!QUEUE[@]}"; do
nice -n "${PRIORITY[$i]}" bash -c "${QUEUE[$i]}" &
PIDS+=($!)
if (( ${#PIDS[@]} >= MAX_PARALLEL )); then
wait -n # ждём завершения хотя бы одной задачи
# удалим завершившиеся из списка
for pid in "${PIDS[@]}"; do
if ! kill -0 "$pid" 2>/dev/null; then
PIDS=("${PIDS[@]/$pid}")
fi
done
fi
done
wait
🔥 Такой подход позволяет:
📍 Делать умные очереди задач
📍 Балансировать нагрузку
📍 Экономить ресурсы
📍 Контролировать порядок и параллелизм
BashTex 📱 #bash