Geidrow 27.09.2011 18:53
Есть вопрос! — Скрипты для изменения приоритета
Доброго времени суток!Подскажите, пожалуйста, как должен выглядеть скрипт, если нужно запускать приложение с пониженным (на 4) приоритетом у планировщика процессорного времени и пониженным приоритетом у планировщика ввода-вывода.
Сложность (для меня) в том, что если просто дать или команду ionice, или nice, то все ок, но если нужно для одного и того же процесса применить обе, то необходимо неизвестной мне командой получить pid созданного процесса, а затем применить к нему renice. А может как-то иначе.
Вот этот пример не работает, т.е. htop показывает обычный приоритет
#!/bin/sh
ionice -c 3 firefox
renice -n 32 firefox
Спасибо
вот эту дичайшую дичь писал спецом, чтоб было понятно пошагово что делается, ибо бывало очень много прецедентов, когда народ не понимал что происходит.
Спасибо!
Давно уже собирался все часто используемые приложения запускать с определёнными приоритетами, но написание скриптов вызывает затруднения. Теперь же возможности Линукса будут реализованы в большей степени, чем раньше :)
Давно уже собирался все часто используемые приложения запускать с определёнными приоритетами, но написание скриптов вызывает затруднения. Теперь же возможности Линукса будут реализованы в большей степени, чем раньше :)
$! даёт PID предыдущего запущенного процесса.
Попробуй
nice -n 32 firefox
ionice -c 3 -p $!
Попробуй
nice -n 32 firefox
ionice -c 3 -p $!
Если мне не изменяет память, то приоритеты можно выдавать в диапазоне [-20;20]. Что такое 32 оно не поймет
Предыдущий запущенный процесс будет nice в этом случае.. И если процесс уже был terminated то значение будет пустое.
так почему-то тоже не запускает.
#!/bin/sh
for i in `pgrep firefox`;
do
ionice -c 3 -p $i &&
sleep 5 &&
renice -n 20 -p $i;
done
#!/bin/sh
for i in `pgrep firefox`;
do
ionice -c 3 -p $i &&
sleep 5 &&
renice -n 20 -p $i;
done
Этот "скрипт" не для запуска, а для изменения приоритета уже запущенного фф.
а как добавить возможность вначале запустить, затем изменить приоритет?
такой вариант запускает, но не меняет приоритет:
#!/bin/sh
firefox
for i in `pgrep firefox`;
do
ionice -c 3 -p $i &&
sleep 1 &&
renice -n 20 -p $i;
done
такой вариант запускает, но не меняет приоритет:
#!/bin/sh
firefox
for i in `pgrep firefox`;
do
ionice -c 3 -p $i &&
sleep 1 &&
renice -n 20 -p $i;
done
>ionice -c 3 -p "$pids" && sleep 1 && renice -n 2- -p "$pids"
вообще-то renice таки затрагивает приоритет и для IO
потому логичней поменять команды местами, не?
второе - зачем ренайсить, если можно сразу запустить с нужными приоритетами, раз уж решил запускать из скрипта?
вообще-то renice таки затрагивает приоритет и для IO
потому логичней поменять команды местами, не?
второе - зачем ренайсить, если можно сразу запустить с нужными приоритетами, раз уж решил запускать из скрипта?
господа, с умным видом дающие советы, вы бы хоть поинтересовались, как файрфок запускается, а потом уже советовали.
firefox - обычный шеловский враппер, который запускает firefox-bin, предварительно настраивая ему окружение. и ловить его по $! - глупство. ловить надо firefox-bin, и ему и выставлять приоритеты.
firefox - обычный шеловский враппер, который запускает firefox-bin, предварительно настраивая ему окружение. и ловить его по $! - глупство. ловить надо firefox-bin, и ему и выставлять приоритеты.
Во-первых, ТС спрашивал принцип, а не конкретно файрфокс. Во-вторых, nice наследуется порождаемыми процессами. Проверь результат firefox & renice 4 -p $!
варвар, во первых, в твоей мрачной конструкции возможна гонка, а во-вторых - сей костыль спокойно заменяется nice -n 4 firefox. а вот что делать с последующим ionice, который тс-у тоже нужен? к моменту его запуска $! может уже вообще не существовать.
Минуснул за невежливое отношение к собеседнику.
Предыдущее сообщение адресовало не вопрос ТС, а исключительно два твоих аргумента: 1. что firefox все равно получит сниженный приоритет, 2. что ловить его по $! вполне уместно. Как запустить и nice, и ionice, я ответил выше топикстартеру.
Предыдущее сообщение адресовало не вопрос ТС, а исключительно два твоих аргумента: 1. что firefox все равно получит сниженный приоритет, 2. что ловить его по $! вполне уместно. Как запустить и nice, и ionice, я ответил выше топикстартеру.
варвар, во первых, в твоей мрачной конструкции возможна гонка, а во-вторых - сей костыль спокойно заменяется nice -n 4 firefox. а вот что делать с последующим ionice, который тс-у тоже нужен? к моменту его запуска $! может уже вообще не существовать.
просьбой
к сожалению, renice не срабатывает.
к моменту его запуска $! может уже вообще не существовать.
к сожалению, renice не срабатывает.
Только что проверил, всё прекрасно работает. Не дурите себе голову.
Чтоб в фоне запустить, само собой надо с амперсандом:
nice -n 20 ionice -c 3 firefox &
И вообще, матчасть у народа хромает. То, что новый процесс, запущенный через пару fork(); exec*(); получает приоритет родительского процесса, многие не подозревают, а между тем именно на этом принципе работают nice и ionice. Для них распишу: nice меняет свой приоритет на 20 и запускает ionice, ionice получает приоритет 20 от родителя, ставит себе низший приоритет ввода-вывода и запускает firefox, в итоге новый отфоркованный процесс получает все приоритеты от родителя (ionice), а их мы знает.
Всё.
nice -n 20 ionice -c 3 firefox &
И вообще, матчасть у народа хромает. То, что новый процесс, запущенный через пару fork(); exec*(); получает приоритет родительского процесса, многие не подозревают, а между тем именно на этом принципе работают nice и ionice. Для них распишу: nice меняет свой приоритет на 20 и запускает ionice, ionice получает приоритет 20 от родителя, ставит себе низший приоритет ввода-вывода и запускает firefox, в итоге новый отфоркованный процесс получает все приоритеты от родителя (ionice), а их мы знает.
Всё.
Но здесь есть нюанс, который ограничивает применение скрипта: приоритет планировщика процессорного времени, будучи выставленным, например 4, уже не запускает firefox-bin с таким же приритетом, системный монитор показывает процесс ionice (со значком firefox'а и приоритетом 4), сам firefox имеет обычный приоритет процессорного времени, idle - у ionice.
похожу мой комментарий был неясным:
nice -n 20 ionice -c 3 firefox & работает
НО
nice -n 4 ionice -c 3 firefox &
nice -n 20 ionice -c 3 firefox & работает
НО
nice -n 4 ionice -c 3 firefox &
У тебя какой-то найс неправильный. Только что попробовал nice -n 4 ionice -c 3 google-chrome, получил процесс с nice=4. С каким приоритетом у тебя шелл выполняется? Процесс может понижать свой найс (повышать приоритет) только если запущен с правами суперюзера.
Только если процесс, запускающий nice, у тебя с приоритетом ниже чем тот, который ты хочешь выставить.
Более того, у тебя не получится НИКАКИМ ОБРАЗОМ повысить приоритет процесса (через nice, renice, с любыми костылями из этого топика), если перед этим не получишь права суперюзера.
Более того, у тебя не получится НИКАКИМ ОБРАЗОМ повысить приоритет процесса (через nice, renice, с любыми костылями из этого топика), если перед этим не получишь права суперюзера.
Чем меньше найс, тем выше приоритет. Процесс с найсом 4 имеет приоритет выше, чем процесс с найсом 10.
Nice value это то, насколько «учтиво» ведёт себя процесс по отношению к другим. То есть чем он выше, тем процесс «учтивее» и охотнее уступает процессорное время другим (приоритет ниже), чем он ниже, тем процесс «грубее», тем сильнее от «расталкивает» другие процессы в очереди к процессору (приоритет выше).
nice -n 4 увеличит приоритет процесса.
Nice value это то, насколько «учтиво» ведёт себя процесс по отношению к другим. То есть чем он выше, тем процесс «учтивее» и охотнее уступает процессорное время другим (приоритет ниже), чем он ниже, тем процесс «грубее», тем сильнее от «расталкивает» другие процессы в очереди к процессору (приоритет выше).
nice -n 4 увеличит приоритет процесса.
Точнее так, увеличит если если текущий приоритет процесса больше 4; уменьшит, если приоритет процесса меньше 4.
выдержка из мана
-n, --adjustment=N
add integer N to the niceness (default 10)
вот только по умолчанию приоритет у пользовательского приложения ноль. Поэтому понизит на 4.
мне надо понизить.
Стратегия такова:
1) выявить приложения, которые обычно одновременно работают с мультимедиа приложениями;
2) чтобы не запускать скрипты (запускающие эти приложения с приоритетами отличными от принятых по умолчанию) от рута, понизить приоритет этих приложений, давая больше ресурсов мультимедиа приложениям.
И никак не могу добиться, чтобы скрипт запускал приложение, затем менял приритеты процессорного времени И ввода-вывода. Поскольку выполнение такого скрипта привязано к комбинации клавиш, как-то неудобно одной комбинацией запускать приложение, другой менять приоритет (в теме есть работоспособный скрипт для этой задачи).
-n, --adjustment=N
add integer N to the niceness (default 10)
вот только по умолчанию приоритет у пользовательского приложения ноль. Поэтому понизит на 4.
не получится НИКАКИМ ОБРАЗОМ повысить приоритет... если перед этим не получишь права суперюзера
мне надо понизить.
Стратегия такова:
1) выявить приложения, которые обычно одновременно работают с мультимедиа приложениями;
2) чтобы не запускать скрипты (запускающие эти приложения с приоритетами отличными от принятых по умолчанию) от рута, понизить приоритет этих приложений, давая больше ресурсов мультимедиа приложениям.
И никак не могу добиться, чтобы скрипт запускал приложение, затем менял приритеты процессорного времени И ввода-вывода. Поскольку выполнение такого скрипта привязано к комбинации клавиш, как-то неудобно одной комбинацией запускать приложение, другой менять приоритет (в теме есть работоспособный скрипт для этой задачи).
Собственно к этому у меня и вопрос:
Потому что nice может не работать в используемой форме (nice -n 4) только если у тебя приоритет процесса, запускающего найс, ниже, чем заданный найсом. Ты запускаешь как? Если из какого виндоу менеджера, то может он у тебя выполняется уже с пониженным приоритетом?
С каким приоритетом у тебя шелл выполняется?
Потому что nice может не работать в используемой форме (nice -n 4) только если у тебя приоритет процесса, запускающего найс, ниже, чем заданный найсом. Ты запускаешь как? Если из какого виндоу менеджера, то может он у тебя выполняется уже с пониженным приоритетом?
Заметьте, что приоритеты находятся в диапазоне от -20 (наибольший приоритет) до 19