#!/bin/sh
N=2
M=30
DATABASE=/tmp/user_stopped_proc.txt
# Процедура нахождения пользователей у которых
# больше N приостановленых процессов.
# Используется в процедуре check_user_stopped_proc
get_user_stopped_proc() {
ps aux | awk '
NR == 1{next}
# признак приостановленного процесса, T в 8-й колонке ps. man ps
$8 ~ /T/ {
s[$1]++;
}
END {
for (i in s)
if (s[i] > '"$1"')
print i
}'
}
# Процедура проверки пользователей, ожидания реакции и записи в файл
check_user_stopped_proc () {
# Отправляем предупреждение найденым пользователям
NAMES="$(get_user_stopped_proc $1)"
for NAME in $NAMES; do
echo "You have too many stopped programs. Maximum $1. Reduce number of programs please" | write "$NAME"
done
# Ожидаем реакции
sleep $2
for NAME in $(get_user_stopped_proc $1); do
# Проверяем что пользователь получил предупреждение в прошлом цикле
if echo "$NAMES" | grep -q "$NAME"; then
echo $NAME >> $DATABASE
fi
done
}
# Запускаем процедуру
check_user_stopped_proc $N $M
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.