如何限制进程及其子进程的 CPU 使用率,无论是否有其他进程需要资源

如何限制进程及其子进程的 CPU 使用率,无论是否有其他进程需要资源

我正在考虑使用 CPUlimit 来限制进程的 CPU 使用率,但我的目标是自动为其子进程应用相同的使用百分比。

有没有什么方法可以限制一个进程及其子进程的 CPU 使用率,无论是否有其他进程同时需要资源?

cgroup cpu.shares 仅当另一个进程需要前一个进程所消耗的资源时才进行限制。我正在寻找类似的东西,sudo cpulimit -p 1234 -l 20这样 CPU 使用率的限制就不会考虑是否有另一个进程需要使用的资源。

这适用于父进程(pid =1234),但不适用于其子进程。

答案1

此链接可能有帮助设置任意进程的最大 CPU 消耗百分比 搜索者:种子先生

这个脚本也可能有帮助,任何人想对这个脚本提出建议以增强它,我都会很高兴

       #!/bin/bash -xv

read -p "Which program u want to limit its processes?" ProgrameName
read -p "Which limitation percentage u want for it ?" limitationPercentage  
read -p "Period to be sleep " sleepInterval 
dataFile="/home/ahmedubuntu/Desktop/.file.txt"
separator="######"
trap "echo \"\" > $dataFile"  SIGINT SIGTERM SIGHUP
########################################################
if [ -e $dataFile ]; then
  echo "File $dataFile already exists!"
  echo -e "" > $dataFile
else
  echo >> $dataFile
fi 
echo -e "$ProgrameName \n $limitationPercentage \n" >> $dataFile
getAllPIDRunUnderThisProgram=$( ps -e | grep "$ProgrameName" | awk '{print $1;}')
echo -e "${getAllPIDRunUnderThisProgram[@]}  \n $separator \n" >> $dataFile
for i in $getAllPIDRunUnderThisProgram
   do
    gnomeTab+=( --tab -e "cpulimit -p $i -l $limitationPercentage ")  
   done
gnome-terminal "${gnomeTab[@]}"
#echo gnome-terminal "${gnomeTab[@]}"
########################################################
while sleep $sleepInterval
do
i=0
while read line
do
if [ -n "$line" ] && ["$line" != "separator"] 
then
programeNameAndPID[i]=$line
((i++))
elif [["$line" == "separator"]] ; then
getAllPIDRunUnderThisProgram=$( ps -e | grep "$programeNameAndPID[0]" | awk '{print $1;}')
if [${#getAllPIDRunUnderThisProgram[*]} -gt ${#programeNameAndPID[*]}-2  ]
then
unset gnomeTab
newProcessNumber=${#getAllPIDRunUnderThisProgram[*]}-${#programeNameAndPID[*]}-2
index=${#getAllPIDRunUnderThisProgram[*]}-1
for (( c=$newProcessNumber ; c > 0 ; c-- ))
do
gnomeTab+=( --tab -e "cpulimit -p $getAllPIDRunUnderThisProgram[$index] -l $programeNameAndPID[1] ") 
((index--)) 
done
gnome-terminal "${gnomeTab[@]}"
fi
i=0
unset programeNameAndPID
fi
done < $dataFile
done

并且通过添加nice -10将正常工作,无需 sudo 和密码

相关内容