В силу своей должности админу приходится ограничивать пользователей.
Отдельных юзверей приходится "мочить" ;).
Иногда возникает необходимость селективно "замочить" каких-то
пользователей так, чтобы уже при входе в систему они получали
пониженный приоритет. Стандартных средств для этого я не нашел,
(буду рад если они есть и кто-то мне их покажет)
поэтому написал два небольших скрипта выполняющих эту задачу.
Два, к сожалению, потому, что скрипты для bash-like и csh-like
шелов совмещаются плохо. Вот первый (для bash-like шелов):
======================================================================
# script to change default user nice for its logging in the system,
# run it in /etc/profile for bash
# /etc/zprofile for zsh
# as:
# source <the script name>
# a logging in user
user_name=`id -un`
# default nice
default_nice=2
# some users may got special nice value,
# the nice is set in the 'case' statement below
new_nice=0
case $user_name in
root) ;;
good_user) ;;
bad_user) new_nice=20 ;;
*) new_nice=$default_nice ;;
esac
renice $new_nice $$ >/dev/null 2>&1
unset user_name
unset new_nice
unset default_nice
======================================================================
а вот второй (для csh-like шелов):
======================================================================
# script to change default user nice for its logging in the system,
# run it in /etc/csh.login for tcsh
# as:
# source <the script name>
# a logging in user
set user_name=`id -un`
# default nice
set default_nice=2
# some users may got special nice value,
# the nice is set in the 'switch' statement below
set new_nice=0
switch ($user_name)
case root:
case good_user:
breaksw
case bad_user:
set new_nice=20
breaksw
default:
set new_nice=$default_nice
breaksw
endsw
renice $new_nice $$ >&/dev/null
unset user_name
unset new_nice
unset default_nice
======================================================================
А можно написать одну утилиту выполняющую теже функции на С, добавить
в нее кучу сервиса (например, зависимость приоритетов от времени и даты,
конфигурационный файл).
пардон за продолжение в новом месте, старое уже покрылось пылью веков
:). Спасибо за советы. В жизни я представляю себе всё так:
я запоминаю чужой handler, ставлю свой, ловлю в handler'е wait'ом
помершие потомки и если помер не мой, то вызываю чужой обработчик
(либо не вызываю, что может привести к какой-нибудь заднице на
стороне, родившей своего потомка),
который, если в нём стоит waitpid, производит необходимые действия
для своего помершего потомка и, в идеале, возвращает управление мне,
если же не дай бог в нём стоит wait, то происходит блокирование до
умервщления следующего потомка, которого может не быть, или (может быть)
прерывания wait'а сигналом, если же такая
задница происходит между двумя библиотеками и программер тут не при
чём, то последнему остаётся писать гневное письмо в адрес авторов
библиотек (и его счастье если он эту задницу вовремя обнаружит).
В идеале же, я бы хотел, чтобы ось позволяла заловить мне
моего потомка не видимо от других (потомков, обработчиков, программеров),
чего UNIX не позволяет, как любая другая ось (?). Any advices?
(нет, свою ось я писать не буду, кишка тонка пока :)