कुछ समय पहले मैंने अपने विश्वविद्यालय की कक्षाओं के लिए एक स्क्रिप्ट बनाई थी, जो सिस्टम संसाधनों (सीपीयू और / या रैम) के उपयोग को नियंत्रित कर रही थी। स्क्रिप्ट प्रारंभ में चर को संपादित करके आप अधिकतम निषिद्ध उपयोग को आसानी से बदल सकते हैं। स्क्रिप्ट को इस तरह से शुरू किया जाना चाहिए:
nohup ./auto_killer.sh &
स्क्रिप्ट उन प्रक्रियाओं की तलाश में है जो हर N सेकंड में बहुत अधिक संसाधनों का उपयोग करती हैं। यदि कुछ प्रक्रिया संसाधनों का बहुत अधिक उपयोग करती है, तो इसे चलाने वाले उपयोगकर्ता को अपने कंसोल पर चेतावनी संदेश मिलता है। यदि एक ही प्रक्रिया को पंक्ति में 2 बार स्पॉट किया जाता है, तो यह मारा जाता है (और उपयोगकर्ता को इसके बारे में जानकारी मिलती है)।
यहाँ कोड है:
#!/bin/bash
Check_Repeating_Time=3; # in seconds
Max_CPU_Usage='25.0'; #%
Max_RAM_Usage='2.0'; #%
Log_Path='/var/log/auto_killer_log'; # path to file when killing logs will be writed
while [ 1 ]; do
ps -aux |
awk '{
Username = $1;
Proc_Name = $11;
CPU_Usage = $3;
RAM_Usage = $4;
PID = $2;
TTY = $7;
if((CPU_Usage >= '$Max_CPU_Usage' || RAM_Usage >= '$Max_RAM_Usage' ) && !($1 == "USER" || $1 == "root" || $1 == "daemon" || $1 == "mysql" || $1 == "avahi" || $1 == "polkitd"))
{
Func_Num_of_Ocur = "cat ./auto_killer_data | grep "PID" | wc -l";
Func_Num_of_Ocur |getline Str_Num_Of_Ocur;
if(Str_Num_Of_Ocur == "0")
{
system ("echo \"\" >> /dev/" TTY);
system ("echo \"Process "Proc_Name" used to much of resources. It will be killed in '$Check_Repeating_Time' seconds if it wont stop!\" >> /dev/" TTY );
system ("echo \"\" >> /dev/" TTY);
system ("echo "PID" >> ./auto_killer_data.new");
}
else
{
system ("echo \"\" >> /dev/" TTY);
system ("echo \"Process "Proc_Name" was killed because it used to much of system resources!\" >> /dev/" TTY );
system ("echo \"\" >> /dev/" TTY);
system ("kill -9 " PID);
Data = "date";
Data |getline Str_Data;
system ("echo \""Str_Data" "Username" "Proc_Name" "TTY"\" >> '$Log_Path'");
}
}
}';
if [ -e ./auto_killer_data.new ]; then
mv ./auto_killer_data.new ./auto_killer_data
else
echo '' > ./auto_killer_data
fi
#We wait fo a while and repeate process
sleep $Check_Repeating_Time\s;
done;
ps
और इसी तरह के उपकरण)। लेकिन असली सवाल यह है कि क्या आप वास्तव में ऐसा चाहते हैं? सभी प्रकार के चेक-प्रोग्राम कुछ समय के लिए बहुत उच्च सीपीयू उपयोग को पीस सकते हैं, छवि-प्रसंस्करण भी ले सकते हैं। आप अपने आप को एक सवाल पूछना चाहिए: इसके लायक बाद है अगर यह गलत प्रक्रिया को मारता है?