История изменений
Исправление rtxtxtrx, (текущая версия) :
тебе тогда нужно среднее арифметическое считать и максимумы с минимумами. Какой смысл в знании того сколько твоя говнопрога жрала 5 минут назад:
#!/bin/bash
# 1. Узнать PID по частичному имени с помощью pgrep
process_name="your_process_name"
pid=$(pgrep -f "$process_name")
if [ -z "$pid" ]; then
echo "Process not found."
exit 1
fi
# Массивы для хранения значений CPU и памяти
cpu_usage_array=()
mem_usage_array=()
# 2. Проверять, жив ли процесс, и выходить, если он умер
while kill -0 "$pid" 2>/dev/null; do
# 3. Проверять, сколько процесс потребляет ресурсов
cpu_usage=$(ps -p "$pid" -o %cpu=)
mem_usage=$(ps -p "$pid" -o %mem=)
echo "CPU Usage: $cpu_usage%, Memory Usage: $mem_usage%" >&2
# Добавляем значения в массивы
cpu_usage_array+=("$cpu_usage")
mem_usage_array+=("$mem_usage")
# Пауза перед следующей проверкой
sleep 0.2
done
# 4. Записывать последний результат и время выполнения после выхода из цикла
end_time=$(date +"%Y-%m-%d %H:%M:%S")
echo "Process $pid has terminated at $end_time."
# Функция для вычисления минимума, среднего и максимума
calculate_stats() {
local array=("$@")
local min=${array[0]}
local max=${array[0]}
local sum=0
local count=${#array[@]}
for value in "${array[@]}"; do
if (( $(echo "$value < $min" | bc -l) )); then
min=$value
fi
if (( $(echo "$value > $max" | bc -l) )); then
max=$value
fi
sum=$(echo "$sum + $value" | bc -l)
done
local avg=$(echo "scale=2; $sum / $count" | bc -l)
echo "$min $avg $max"
}
# Вычисляем статистику для CPU и памяти
cpu_stats=($(calculate_stats "${cpu_usage_array[@]}"))
mem_stats=($(calculate_stats "${mem_usage_array[@]}"))
# Выводим результаты
echo "CPU Usage: Min: ${cpu_stats[0]}%, Avg: ${cpu_stats[1]}%, Max: ${cpu_stats[2]}%"
echo "Memory Usage: Min: ${mem_stats[0]}%, Avg: ${mem_stats[1]}%, Max: ${mem_stats[2]}%"
Код я не проверял и не буду. Сам перепишешь
Исходная версия rtxtxtrx, :
тебе тогда нужно среднее арифметическое считать и максимумы с минимумами. Какой смысл в знании того сколько твоя говнопрога жрала 5 минут назад:
#!/bin/bash
# 1. Узнать PID по частичному имени с помощью pgrep
process_name="your_process_name"
pid=$(pgrep -f "$process_name")
if [ -z "$pid" ]; then
echo "Process not found."
exit 1
fi
# Массивы для хранения значений CPU и памяти
cpu_usage_array=()
mem_usage_array=()
# 2. Проверять, жив ли процесс, и выходить, если он умер
while kill -0 "$pid" 2>/dev/null; do
# 3. Проверять, сколько процесс потребляет ресурсов
cpu_usage=$(ps -p "$pid" -o %cpu=)
mem_usage=$(ps -p "$pid" -o %mem=)
echo "CPU Usage: $cpu_usage%, Memory Usage: $mem_usage%" >&2
# Добавляем значения в массивы
cpu_usage_array+=("$cpu_usage")
mem_usage_array+=("$mem_usage")
# Пауза перед следующей проверкой
sleep 0.2
done
# 4. Записывать последний результат и время выполнения после выхода из цикла
end_time=$(date +"%Y-%m-%d %H:%M:%S")
echo "Process $pid has terminated at $end_time."
# Функция для вычисления минимума, среднего и максимума
calculate_stats() {
local array=("$@")
local min=${array[0]}
local max=${array[0]}
local sum=0
local count=${#array[@]}
for value in "${array[@]}"; do
if (( $(echo "$value < $min" | bc -l) )); then
min=$value
fi
if (( $(echo "$value > $max" | bc -l) )); then
max=$value
fi
sum=$(echo "$sum + $value" | bc -l)
done
local avg=$(echo "scale=2; $sum / $count" | bc -l)
echo "$min $avg $max"
}
# Вычисляем статистику для CPU и памяти
cpu_stats=($(calculate_stats "${cpu_usage_array[@]}"))
mem_stats=($(calculate_stats "${mem_usage_array[@]}"))
# Выводим результаты
echo "CPU Usage: Min: ${cpu_stats[0]}%, Avg: ${cpu_stats[1]}%, Max: ${cpu_stats[2]}%"
echo "Memory Usage: Min: ${mem_stats[0]}%, Avg: ${mem_stats[1]}%, Max: ${mem_stats[2]}%"