1

是否可以判断进程/线程是否PF_NO_SETAFFINITY设置了标志?我在一系列进程 ID 上运行任务集,其中一些正在抛出以下形式的错误:

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

我相信这是因为已经PF_NO_SETAFFINITY设置了一些流程(请参阅答案)。

谢谢!

4

1 回答 1

2

是的 - 查看 /proc/PID/stat“标志”字段

<linux/sched.h

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

在此处查看有关使用 /proc 的详细信息:

例子:

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


问:您介意指定如何编写一个简单的脚本,根据您是否被允许设置亲和力来输出真/假吗?

答:如果没有机会进行测试,我会感到舒服,但你可以尝试这样的事情......

flags=$(cut -f 9 -d ' ' /proc/30084/stat)
echo $(($flags & 0x40000000))
于 2020-02-06T17:41:29.103 回答