使用两个参数正确使用sched_setaffinity

时间:2014-10-08 18:49:02

标签: linux-kernel kernel task

我最近为sched_setaffinity方法找到了这个原型:

extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask);

我正在尝试使用它来设置任务的亲和力,但它似乎不起作用。这是我的实施:

#define _GNU_SOURCE 
#include <linux/sched.h>
#include <linux/cpumask.h>

int set_aff (pid_t pid, int core)
{
   static DECLARE_BITMAP(cpu_possible_bits, CONFIG_NR_CPUS);
   struct cpumask *const task_cpumask = to_cpumask(cpu_possible_bits);
   cpumask_set_cpu(core, task_cpumask);

   sched_setaffinity(pid, task_cpumask);

   return 0;
}

我的代码编译时没有任何错误,但是当我尝试调用此方法时,它会中断。有谁知道为什么?

有没有更好的方法从内核方法中执行此操作?

1 个答案:

答案 0 :(得分:-1)

你应该试试这个:

    cpu_set_t cpuset;
    CPU_ZERO(&cpuset);
    CPU_SET(1, &cpuset);
    if (sched_setaffinity(0, sizeof(cpu_set_t), &cpuset)) 
            exit(1);