web-dev-qa-db-fra.com

Comment limiter l'utilisation du processeur pour un processus et ses enfants s'il existe un autre processus exigeant des ressources ou non

Je pensais utiliser CPUlimit pour limiter l'utilisation du processeur, mais je souhaite appliquer le même pourcentage d'utilisation pour ses processus enfants de manière trop automatique.

Y a-t-il quelque chose qui peut limiter l'utilisation du processeur pour un processus et ses enfants, qu'il y ait ou non un autre processus nécessitant des ressources en même temps?

cgroup cpu.shares ne limite que lorsqu'un autre processus a besoin des ressources consommées par un processus précédent. Ce que je recherche, c'est quelque chose comme Sudo cpulimit -p 1234 -l 20 afin que la limite d'utilisation du processeur ne considère pas s'il existe un autre processus ou n'exige pas les ressources utilisées.

Cela a été appliqué au processus parent (pid = 1234) mais pas à ses enfants.

3
Ahmed Zain El Dein

Ce lien peut aider Définir la consommation CPU maximale en pourcentage pour n’importe quel processus recherché par: MrSeed

ce script peut aussi aider, tout le monde veut entrer des suggestions sur ce script pour l'améliorer, ce sera un plaisir

       #!/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

et en ajoutant Nice -10 fonctionnera bien sans Sudo ni mot de passe

2
Ahmed Zain El Dein