#!/bin/bash set -e set -u cores=$(nproc) limits=( # process_name:limit% firefox:$(( 50 * cores )) vesktop:$(( 20 * cores )) ) # check for cpulimit command if ! command -v cpulimit 2>/dev/null >/dev/null; then echo "ERROR: need cpulimit command" >&2 exit 1 fi limit_process() { local process_name="$1" local limit_percentage="${2%%.}" cpulimit -i -e "$process_name" -l "$limit_percentage" } limit_processes() { local pids pids=() for limit in "${limits[@]}"; do IFS=: read process_name limit_percentage <<<"$limit" limit_process "$process_name" "$limit_percentage" & pids+=($!) done wait "${pids[@]}" } limit_processes