Проверьте значение PF_NO_SETAFFINITY - PullRequest
1 голос
/ 06 февраля 2020

Можно ли определить, установлен ли у процесса / потока флаг PF_NO_SETAFFINITY? Я запускаю набор задач для ряда идентификаторов процессов, и некоторые из них выдают ошибки следующей формы:

taskset: failed to set pid 30's affinity: Invalid argument

Я полагаю, это потому, что в некоторых процессах установлен PF_NO_SETAFFINITY (см. Ответ ).

Спасибо!

1 Ответ

2 голосов
/ 06 февраля 2020

Да - посмотрите на /proc/PID/stat поле '' флажка ''

<linux/sched.h

#define PF_NO_SETAFFINITY 0x04000000        /* Userland is not allowed to meddle with cpus_allowed */

Узнайте здесь подробности об использовании / pro c:

Пример:

ps -eaf
www-data 30084 19962  0 07:09 ?        00:00:00 /usr/sbin/apache2 -k start
...

cat /proc/30084/stat
30084 (apache2) S 19962 19962 19962 0 -1 4194624 554 0 3 0 0 0 0 0 20 0 1 0 298837672 509616128 5510 18446744073709551615 1 1 0 0 0 0 0 16781312 201346799 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Флаги 4194624


В: Не могли бы вы указать, как написать простой скрипт, который выводит true / false в зависимости от того, разрешено ли вам устанавливать сходство?

A: I не чувствую себя комфортно, предоставляя это без возможности тестирования, но вы можете попробовать что-то вроде этого ...

flags=$(cut -f 9 -d ' ' /proc/30084/stat)
echo $(($flags & 0x40000000))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...