cputhrottle
è lo strumento necessario. Puoi installarlo con Homebrew .
È possibile monitorare una serie di processi per nome eseguendo lo script Bash di seguito. Non sono abbastanza sicuro di come trasformarlo in un elemento di accesso poiché cputhrottle
richiede autorizzazioni di superutente. Eseguilo come script, in un flusso di lavoro di Automator, qualunque sia:
# 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
[Edited]
Ho aggiunto una versione diversa per questo script (uno script bash
), che potrebbe essere utile per le persone che cercano di limitare la CPU per più applicazioni.
Questo nuovo script consente anche di specificare un elenco contenente il nome dell'applicazione e il limite della CPU per esso.
La differenza principale è che è possibile aggiungere il limite di CPU per applicazione e verrà eseguito solo una volta per applicazione. Ho anche aggiunto l'opzione per uccidere tutti i processi cputhrottle
.
Lo script presuppone che sia cputhrottle
sia pidof
siano installati prima di eseguirlo.
#!/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."
Fonte: