我可以通过像这样运行它来为进程分配一个 cpu 核心:
taskset -c 21 ./wait xx
在这里, ./wait 是一个可执行文件,其代码如下所示,我正在尝试将 core=21 分配给该进程。
但是当我尝试从另一个进程(使用 execl)做同样的事情时,它不起作用。例如,以下代码执行进程(未报告错误),但未完成对该进程的核心分配:
// run as: ./a.out name 21
#include <stdio.h>
#include <unistd.h>
#include <stdarg.h>
int main(int argc, char* argv[]) {
printf("scheduling\n");
int status = execl("/usr/bin/taskset", "-c", argv[2], "./wait", argv[1], NULL);
if(status<0) perror("Err:");
}
这是等待程序的代码,它只是等待用户提供一些输入,以便我有时间从另一个终端检查 cpu 状态:
// run as: ./wait name
#include <stdio.h>
#include <stdarg.h>
int main(int argc, char* argv[]) {
printf("%s:asking for user input\n", argv[1]);
int x;
scanf("%d", &x);
printf("got-%d\n", x);
}
所以,我的问题是:如何在运行进程时使用 execl 分配 cpu-core?(顺便说一句,如果进程已经在运行并且我有它的 pid,那么在该 pid 上执行任务集将更改该进程的核心分配。只有按照此处所示的方式完成时,它才起作用。)