См. https://wiki.archlinux.org/index.php/qt
Пакеты Qt
не предоставляют обычные bin
(например, qmake
) больше в / usr / bin
.
Вместо -qt5
, -qt4
и -qt3
предоставляются символические ссылки (например, qmake-qt5
, qmake- qt4
, qmake-qt3
).
Обратите внимание, что в настоящее время хорошие значения могут быть не столь актуальны »система -wide », из-за автоматической группировки задач, особенно при использовании systemd . См. этот ответ для получения более подробной информации.
Важный вопрос по Linux, потому что документация увековечивает сомнения (например, в отношении потоков, не имеющих собственного PID).
Примечание: этот ответ точно объясняет потоки Linux.
Вкратце: ядро обрабатывает только «выполняемые объекты», то есть то, что может быть запущено и запланировано . С точки зрения ядра эти объекты называются процессами. Поток - это просто процесс, который разделяет (по крайней мере) пространство памяти и обработчики сигналов с другим.
Каждый такой процесс имеет уникальный для всей системы идентификатор: PID (идентификатор процесса). Для так называемых потоков его иногда называют TID (Thread ID), но с точки зрения системного администратора (и ядра!) TID и PID - это одно и то же (они имеют одно и то же пространство имен).
В результате вы можете переименовывать
каждый «поток» по отдельности, потому что у них есть свой собственный PID 1 .
renice
Нам нужно получить PID всех процессов («нормальный» или «поток»), которые являются потомками (дочерними или в группе потоков) для - внимательный процесс. Это должно быть рекурсивным (учитывая детей детей).
Ответ Антона Леонтьева дает подсказку для этого: все имена папок в / proc / $ PID / task /
являются PID потока, содержащего дочерний
список потенциальных файлов детские процессы.
Однако в нем отсутствует рекурсивность, поэтому вот быстрый и грязный сценарий оболочки, чтобы найти их:
#!/bin/sh
[ "$#" -eq 1 -a -d "/proc/$1/task" ] || exit 1
PID_LIST=
findpids() {
for pid in /proc/$1/task/* ; do
pid="$(basename "$pid")"
PID_LIST="$PID_LIST$pid "
for cpid in $(cat /proc/$1/task/$pid/children) ; do
findpids $cpid
done
done
}
findpids $1
echo $PID_LIST
Если PID процесса 1234 - это тот, который вы хотите рекурсивно улучшить, теперь вы можете сделать:
renice -n 15 -p $(/path/to/findchildren.sh 1234)
1 Обратите внимание, что для соответствия POSIX вызов getpid (2)
в потоке не даст вам общесистемный уникальный идентификатор (PID) этого исполняемого объекта, а скорее PID основной процесс в «группе потоков». Вместо этого вам нужно будет вызвать gettid (2)
. См. этот ответ для получения дополнительной информации.
Вы можете использовать / proc / $ PID / task
, чтобы найти все потоки данного процесса, поэтому вы можете использовать
$ ls /proc/$PID/task | xargs renice $PRIO
to переименовывать
все потоки , принадлежащие данному процессу.
Таким же образом / proc / $ PID / task / $ PID / children
можно использовать для поиска всех дочерних процессов (или / proc / $ PID / task / * / children
, если вам нужны все дочерние процессы из всех потоков данного процесса).
$ cat /proc/$PID/task/$PID/children | xargs renice $PRIO
$ cat /proc/$PID/task/*/children | xargs renice $PRIO
Я бы рекомендовал использовать аргумент -g (группы процессов )вместо -p (идентификатора процесса )при использовании renice. Он делает то же самое без bash -foo.
т.е.
(sudo) renice -n <NEW_PRIORITY> -g <MAIN_PROCESS_ID>
Вот мой сценарий:
pgrep -v <PROCESS_NAME> | sudo xargs renice <NEW_PRIORITY>