Created
October 10, 2018 17:55
-
-
Save lifeofcoding/839512975c597bf0ba61c6ebd9aeda0c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# CPU limit of a process | |
# | |
# Variables | |
CPU_LIMIT=50 # Maximum percentage CPU consumption by each PID | |
# NOTE: If your machine has one processor you can limit the percentage from 0% to 100%, which means that if you set for example 50%, your process cannot use more than 500 ms of cpu time for each second. But if your machine has four processors, percentage may vary from 0% to 400%, so setting the limit to 200% means to use no more than half of the available power. | |
DAEMON_INTERVAL=3 # Daemon check interval in seconds | |
BLACKLIST="atom|chrome" # Processes to be limited. If variable is empty (default) all violating processes are limited. | |
for PROCESS_1 in $BLACKLIST | |
do | |
if [ -n "$PROCESS_1" ] # Process_1 entered | |
then | |
PID_1="pidof $PROCESS_1" # Set NEW_PIDS_COMMAND variable to below command | |
echo "Limit Process of: $PROCESS_1" | |
cpulimit --pid "$PID_1" -b -l "$CPU_LIMIT" # Run cpulimit with selected paramters | |
else | |
echo "All Processes limited to: $CPU_LIMIT" | |
PID_1="top -b -n1 -c | gawk 'NR>6 && \$9>CPU_LIMIT {print \$1}' CPU_LIMIT=$CPU_LIMIT" # Set global CPU limit | |
fi | |
# Search and limit violating PIDs | |
while sleep $DAEMON_INTERVAL | |
do | |
NEW_PIDS=$(eval "$PID_1") # Violating PIDs | |
LIMITED_PIDS=$(ps -eo args | gawk '$1=="cpulimit" {print $3}') # Already limited PIDs | |
QUEUE_PIDS=$(comm -23 <(echo "$NEW_PIDS" | sort -u) <(echo "$LIMITED_PIDS" | sort -u) | grep -v '^$') # PIDs in queue | |
for i in $QUEUE_PIDS | |
do | |
cpulimit -p $i -l $CPU_LIMIT -z & # Limit new violating processes | |
done | |
done | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment