我最近为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;
}
我的代码编译时没有任何错误,但是当我尝试调用此方法时,它会中断。有谁知道为什么?
有没有更好的方法从内核方法中执行此操作?
答案 0 :(得分:-1)
你应该试试这个:
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(1, &cpuset);
if (sched_setaffinity(0, sizeof(cpu_set_t), &cpuset))
exit(1);