Вы можете установить значения nice для каждого пользователя -или группы -, используя pam_limits
и файл /etc/security/limits.conf
.
напр.
username hard priority 15
Это влияет только на службы PAM, которые настроены на использование модуля pam_limits
. В зависимости от вашего дистрибутива это, вероятно, уже включено для таких служб, как login
, cron
, atd
, sshd
и других. Или вам может потребоваться включить его, добавив строку, подобную следующей, например,/etc/pam.d/login
:
session required pam_limits.so
Подробнее см. man pam_limits
и комментарии в /etc/security/limits.conf
. Если у вас установлен пакет документов PAM, дополнительная документация может находиться по адресу /usr/share/doc/libpam-doc/html/sag-pam_limits.html
Перенаправления и каналы в awk аналогичны перенаправлениям и каналам в sh, но есть одно важное отличие. В sh foo >bar
держит bar
открытым только на время действия команды foo
, а foo | bar
ожидает завершения как foo
, так и bar
. В awk перенаправление или канал остаются открытыми до тех пор, пока они не будут закрыты явным образом, а перенаправление или подключение к одному и тому же имени файла или команде несколько раз повторно использует открытое перенаправление/канал.
Например, в sh это выводит a
, b
, c
, a
, b
, потому что каждая команда сортировки получает только две строки ввода:
{ echo b; echo a; } | sort
echo c
{ echo b; echo a; } | sort
Но в awk это печатает c
, a
, a
, b
, b
(, предполагая, что вывод awk представляет собой строку -, буферизованную, иначе c
может быть отложено ), потому что есть единственная команда sort
, и она ничего не напечатает, пока не получит все свои входные данные, что происходит только тогда, когда входная сторона канала закрывается.
{ print "b"; print "a"; } | "sort";
print "c";
{ print "b"; print "a"; } | "sort";
Чтобы завершить конвейерную команду, вызовите функцию close
явно. Awk неявно закрывает все открытые каналы и перенаправления при выходе. Это печатает a
, b
, c
, a
, b
:
{ print "b"; print "a"; } | "sort"; close("sort");
print "c";
{ print "b"; print "a"; } | "sort"; close("sort");
Аналогично, этот фрагмент awk создает двухстрочный -файл, поскольку foo
открывается один раз первой строкой и остается открытым при запуске второй строки:
print "hello" >"foo";
print "world" >"foo";
Принимая во внимание, что этот фрагмент sh создает файл с одной -строкой, поскольку вторая строка открывает файл, созданный первой строкой, и усекает его перед записьюworld
:
echo hello >foo
echo world >foo
Основная причина, по которой awk спроектирован таким образом, заключается в том, что существует неявный цикл обработки каждой строки. В ш,если вы хотите обрабатывать строки в цикле, вы обычно пишете перенаправление вокруг цикла:
while read line; do
if condition "$line"; then
process line
fi
done >output
Но в awk не было бы способа применить перенаправление к неявному циклу, поэтому вы пишете
condition($0) { process $0 >"output" }
Способ awk также более мощный, потому что вы можете открывать и закрывать каналы по желанию, даже в середине цикла или других блоков. В sh это возможно для перенаправлений со встроенной командой exec
, но не для каналов :канал должен применяться к (возможно составной команде )в целом.