diff --git a/cpu_strees.sh b/cpu_strees.sh new file mode 100644 index 0000000..d9b84e3 --- /dev/null +++ b/cpu_strees.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +# Функция для аварийного завершения +cleanup() { + echo -e "\n[!] Аварийная остановка... Завершаем все процессы." + pkill -P $$ # Убиваем все дочерние процессы + exit 1 +} + +trap cleanup SIGINT SIGTERM # Перехватываем Ctrl+C + +# Числа Фибоначчи (рекурсия + большие числа) +fib() { + local n=$1 + if (( n <= 1 )); then + echo $n + else + echo $(( $(fib $((n-1))) + $(fib $((n-2))) )) + fi +} + +# Тяжёлые вычисления с плавающей точкой (симуляция БПФ) +floating_point_stress() { + local i + for (( i=0; i<500; i++ )); do + awk 'BEGIN { + sum = 0 + for (j=0; j<1000; j++) { + sum += sin(j) * cos(j) / (sqrt(j+1) + 0.0001) + } + }' >/dev/null + done +} + +# Генерация SHA-256 хешей +hash_stress() { + local str="CPU_STRESS_TEST_$RANDOM" + for (( i=0; i<1000; i++ )); do + echo "$str$i" | sha256sum >/dev/null + done +} + +# Проверка простых чисел (упрощённый тест) +is_prime() { + local n=$1 + if (( n < 2 )); then + return 1 + fi + for (( i=2; i*i<=n; i++ )); do + if (( n % i == 0 )); then + return 1 + fi + done + return 0 +} + +prime_stress() { + local i + for (( i=2; i<5000; i++ )); do + is_prime $i + done +} + +# Запуск нагрузочных тестов в параллельных подпроцессах +run_stress_test() { + echo "[+] Запуск сложного CPU-теста (алгоритмы: Фибоначчи, плавающая арифметика, SHA-256, простые числа)..." + echo "[!] Нажмите Ctrl+C для остановки." + + # Запускаем нагрузку на всех ядрах + for (( core=0; core<$(nproc); core++ )); do + ( + while true; do + fib 20 >/dev/null + floating_point_stress + hash_stress + prime_stress + done + ) & + done + + wait # Ждём завершения (никогда не произойдёт, пока не нажмём Ctrl+C) +} + +run_stress_test