LINUX.ORG.RU

Изменение приоритетов процессов по program basename


0

1

Всем доброго времени суток. Есть некая программа, которая создаёт кучу процессов. Мне надо сделать так, чтобы можно было разом поменять приоритеты всех этих процессов.
Команда renice, судя по манам, предоставляет не совсем то, что мне нужно. С её помощью ожно создать отдельного юзера, запустить программу от его имени и потом менять приоритеты с помощью

renice -20 -u user_n
, но... Костыль - он и в Африке костыль =(.
Так что задаю вопрос: можно-ли каким-либо образом массово и за короткое время изменить приоритеты по program basename? Или каким-нибудь другим, отличным от вышеуказанного (который с user_n), способом?



Последнее исправление: Garbad (всего исправлений: 1)

Проверьте с помощью pstree -g -p главныйпид, может, все созданные процессы в одной группе. Тогда renice -g пригодится (осторожно со старыми или минималистичными шеллами, не умеющими job control — там группа может унаследоваться от шелла).

Ещё вас может устроить renice -p $(pgrep programname), но это кривее (kill я бы делать так не стал, например — может пострадать невиновный процесс).

LeninGad
()
Последнее исправление: LeninGad (всего исправлений: 1)
Ответ на: комментарий от LeninGad

К сожалению, в группе с нужными процессами находятся ещё 2 программы.
Вариант номер 2 изменяет только один (у которого наименьший PID) процесс... Как ни странно.

Garbad
() автор топика
Ответ на: комментарий от Garbad

Про вариант 2 интересно, что renice пишет (обычно ж он говорит, old priority, new priority, такие дела).

Про вариант 1 интересно, кто к группе примазался (если шелл-родитель, то запуск bash -c program вместо program может помочь).

LeninGad
()
Ответ на: комментарий от LeninGad

I. - renice стандартно пишет, что

3198 (process ID) old priority 0, new priority -20

II. - Убил «левые» программы из группы 3198, но всё-равно...

pstree -g -p 3198
ptrs(3198,2755)─┬─{ptrs}(3204,2755)
                 ├─{ptrs}(3206,2755)
                 ├─{ptrs}(3207,2755)
                 ├─{ptrs}(3209,2755)
                 ├─{ptrs}(3210,2755)
                 ├─{ptrs}(3211,2755)
                 ├─{ptrs}(3212,2755)
                 ├─{ptrs}(3214,2755)
                 ├─{ptrs}(3215,2755)
                 ├─{ptrs}(3216,2755)
                 ├─{ptrs}(3218,2755)
                 ├─{ptrs}(3219,2755)
                 ├─{ptrs}(3220,2755)
                 ├─{ptrs}(3223,2755)
                 ├─{ptrs}(3225,2755)
                 ├─{ptrs}(3228,2755)
                 ├─{ptrs}(3236,2755)
                 ├─{ptrs}(3332,2755)
                 ├─{ptrs}(3336,2755)
                 ├─{ptrs}(3342,2755)
                 ├─{ptrs}(3343,2755)
                 └─{ptrs}(3347,2755)
renice -n -20 -g 3198
renice: failed to get priority for 3198 (process group ID): No such process

Хотя процесс имеется в наличии. И ещё... Если я вместо 3198 подставляю 2755, то нужные процессы меняют свои приоритеты... Но и ещё и другие за них цепляются (тот-же хром, например)

Garbad
() автор топика
Ответ на: комментарий от Garbad

Группа у вас как раз 2755 (второе число в скобочках по pstree).

Чтобы другие не цеплялись, попробуйте главный ptrs запускать отдельным шеллом (bash -c ptrs). Или способ запуска ptrs от вас не зависит? Или вы вообще перезапускать не хотите, а нужно решение «на сейчас»?

LeninGad
()
Ответ на: комментарий от LeninGad

Спасибо. Отдельным шеллом помогло (каким-то образом проскочил строку об этом в предыдущем комментарии). В pstree ничего не зацепилось
Но решение «на сейчас»... Думаю, тоже будет не бесполезно знать. На будущее. В голову приходит либо вручную переназначать приоритеты, либо запустить в отдельном шелле эту программу ещё раз, а предыдущую сразу же убить.

Garbad
() автор топика
Ответ на: комментарий от Garbad

Если перезапускать, вообще можно nice -20 ptrs обойтись, и дочерние процессы сами его наследуют.

А «на ходу» я бы вариант с pgrep мучил (похоже, pgrep выводит только один pid изо всех ptrs. Можно попробовать pgrep -v, например).

LeninGad
()

Задействуйте для этого cgroups, благо для того они и были созданы.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.