web-dev-qa-db-ja.com

リソースを要求する別のプロセスがあるかどうかにかかわらず、プロセスとその子のCPU使用率を制限する方法

CPUlimitを使用してプロセスのCPU使用率を制限することを考えていましたが、子プロセスにも同じ割合の使用率を自動的に適用することを目指しています。

同時にリソースを必要とする別のプロセスがあるかどうかにかかわらず、プロセスとその子のCPU使用率を制限できるものはありますか?

cgroup cpu.sharesは、前のプロセスが消費したリソースを必要とする別のプロセスがある場合にのみ制限します。私が探しているのはSudo cpulimit -p 1234 -l 20のようなものなので、CPU使用量の制限は、別のプロセスがあるかどうか、使用済みリソースを要求していないかどうかを考慮しません。

これは親プロセス(pid = 1234)に適用されましたが、その子には適用されませんでした。

3

このリンクが役立つ場合があります プロセスごとの最大CPU消費量をパーセンテージで設定 検索対象: 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とパスワードを必要とせずにうまく機能します

2