댓글에 맞추기에는 너무 컸습니다. 을 포함하도록 Amey의 원래 스크립트를 수정 했으므로 pgrep
프로세스 ID를 수동으로 입력하는 대신 이름으로 제외 할 수 있습니다. 예를 들어 ./killIf.sh chrome 4000
메모리 사용량이 4GB를 초과하는 모든 크롬 프로세스를 종료합니다.
#!/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 문자열과 충분한 메모리 제한을 선택해야합니다.