これは大きすぎてコメントに収まりません。Ameyの元のスクリプトを変更してを含めるようpgrep
にしたため、プロセスIDを手動で入力する代わりに、名前で除外することができます。たとえば./killIf.sh chrome 4000
、メモリ使用量が4GBを超えるChromeプロセスを強制終了します。
#!/bin/sh
# $1 is process name
# $2 is memory limit in MB
if [ $# -ne 2 ];
then
echo "Invalid number of arguments"
exit 0
fi
while true;
do
pgrep "$1" | while read -r procId;
do
SIZE=$(pmap $procId | grep total | grep -o "[0-9]*")
SIZE=${SIZE%%K*}
SIZEMB=$((SIZE/1024))
echo "Process id = $procId Size = $SIZEMB MB"
if [ $SIZEMB -gt $2 ]; then
printf "SIZE has exceeded.\nKilling the process......"
kill -9 "$procId"
echo "Killed the process"
exit 0
else
echo "SIZE has not yet exceeding"
fi
done
sleep 1
done
意図しないプロセスを不必要に殺さないように、狭いgrep文字列と十分に大きいメモリ制限を選択するように注意してください。