cputhrottle
es la herramienta que necesita. Puede instalarlo con Homebrew .
Puede supervisar una serie de procesos por nombre ejecutando el script Bash a continuación. No estoy seguro de cómo convertir esto en un elemento de inicio de sesión, ya que cputhrottle
requiere permisos de superusuario. Ejecútelo como un script, en un flujo de trabajo de Automator, lo que sea:
# Get the Process/App names from Activity Monitor and put them here
apps=("AppOne" "AppTwo" "AppThree")
# Set the respective limits here
limits={30 40 50)
while true; do
for app in ${apps}; do
for limit in ${limits}; do
for pid in $(pgrep ${app}); do
sudo /path/to/cputhrottle ${pid} ${limit}
done
done
done
done
[Editado]
He agregado una versión diferente para este script (un script bash
), que podría ser útil para las personas que buscan limitar la CPU para múltiples aplicaciones.
Este nuevo script también le permite especificar una lista que contenga el nombre de la aplicación y el límite de la CPU para ello.
La principal diferencia es que puede agregar el límite de CPU por aplicación, y se ejecutará solo una vez por aplicación. También he agregado la opción para eliminar todos los procesos cputhrottle
.
El script asume que tanto cputhrottle
como pidof
están instalados antes de ejecutarlo.
#!/bin/bash
if [[ $EUID > 0 ]]; then
echo "Please run this script as root/sudo"
exit 1
fi
# Pass --kill as argument to kill all running cputhrottles
if [ $1 = "--kill" ]; then
echo "Looking for running cputhrottles..."
pids='pidof cputhrottle'
for pid in ${pids}; do
echo "> Killing PID ${pid}"
sudo kill ${pid}
done
echo "Done!"
exit 0
fi
declare -a applications
# Syntax='application;max-cpu'
applications[0]='Chrome;40'
applications[1]='Firefox;50'
applications[2]='pycharm;40'
applications[3]='webstorm;40'
applications[4]='Safari;35'
for i in "${applications[@]}"; do
app=(${i//;/ })
app_name=${app[0]}
cpu_limit=${app[1]}
printf "\nLooking for ${app_name}...\n"
pids='pidof ${app}'
for pid in ${pids}; do
echo "> PID=${pid}, CPU=${cpu_limit}"
sudo cputhrottle ${pid} ${cpu_limit} &
done
done
printf "\nDone!\n"
echo "Run this script passing '--kill' as argument to remove all cputhrottles."
Fuente: