Комплекс Renicing многопоточные приложения в Linux

Приложения (особенно большой Java и C++) часто обнаруживаются как несколько строк в htop, каждый имеет отдельный PID и разделяет хороший уровень. Также приложение может породить много дочерних процессов (как как в aptitude update), таким образом, я должен влиять оба, порождают один (чтобы заставить новых детей иметь новый приоритет) и дочерние (для обеспечения эффекта сразу, не после того, как ребенок завершает),

Как я могу применить "renice" или "ionice" или "schedtool" к уже запущенному большому приложению?

3
задан 04.10.2010, 16:25

3 ответа

1) Получите PID самого верхнего процесса и помните это.

2) Получите все процессы с PPID помнившего PID и помните их PIDs

3) повторите шаг 2, пока не будет никаких новых PIDs.

4) Для каждого PID примените команду к тому процессу.

Не должно быть слишком трудным на Вашем любимом языке.

1
ответ дан 08.12.2019, 01:45

У меня нет полностью надежного решения, но во многих случаях набор целевых процессов будет группой процесса. Если $parent pid родительского процесса, следующие списки команд pids процессов в группе:

ps -eo pgrp:1=,pid:1= |sed -n "s/^$parent //p"
1
ответ дан 08.12.2019, 01:45

Обратите внимание, что правильность ЦП наследована дочерними процессами. Таким образом, просто renice родитель (или запускают его использование nice); дочерние процессы получат ту же правильность.

Если дети будут уже работать, когда Вы сделаете это, у Вас, конечно, будут к renice они отдельно. Но на практике я нашел, что обычно существует всего несколько процессов что действительно пожиратель ресурсов ЦП; я renice они и родительский процесс.

0
ответ дан 08.12.2019, 01:45

Теги

Похожие вопросы