37 lines
660 B
Bash
Executable File
37 lines
660 B
Bash
Executable File
#!/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
|