Я думал об использовании CPUlimit для ограничения использования процессора процессами, но я намерен применять тот же процент использования для его дочерних процессов слишком автоматически.
Есть ли что-то, что может ограничивать использование ЦП для процесса и его дочерних элементов независимо от того, существует ли или нет другой процесс, требующий ресурсов одновременно?
cgroup cpu.shares ограничивает только, когда существует другой процесс, требующий ресурсов, использованных предыдущим процессом. Я ищу что-то вроде sudo cpulimit -p 1234 -l 20
, поэтому ограничение на использование процессора не учитывает, существует ли другой процесс или не требует использования ресурсов.
Это было применено к родительскому процессу (pid = 1234), но не к его дочерним элементам.
Эта ссылка может помочь потреблению ресурсов ЦП максимума Набора в проценте любым процессом, искавшим: MrSeed
этот сценарий может помочь также, любой, который любой хочет ввести предложения в этот сценарий для улучшения его, это будет мое удовольствие
#!/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 и паролю