You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过execl调用taskset为新启动进程分配CPU核心?

问题原因

execl 函数的传参规则为:

  • 第一个参数是目标可执行文件的完整路径
  • 从第二个参数开始,依次对应目标程序的 argv[0](程序自身名称)、argv[1]、argv[2]... 最后以 NULL 作为参数结束标记

你现有代码的错误是没有传入 taskset 的 argv[0],直接把 -c 作为第二个参数传入,导致 taskset 解析参数异常,CPU 绑定逻辑没有触发,但是参数未触发显式报错,因此进程可以正常启动。

修复方案

修改 execl 调用行,补充 taskset 自身的程序名作为 argv[0] 即可,修改后的代码如下:

// run as: ./a.out name 21
#include <stdio.h>
#include <unistd.h>
#include <stdarg.h>

int main(int argc, char* argv[]) {
    printf("scheduling\n");
    // 补充"taskset"作为argv[0]参数
    int status = execl("/usr/bin/taskset", "taskset", "-c", argv[2], "./wait", argv[1], NULL);
    if(status<0) perror("Err:");
}

如果执行时报错找不到taskset,可先执行which taskset确认本机的taskset可执行文件路径,替换execl的第一个参数即可。

验证方式

启动程序后,可以通过以下命令查看进程的CPU绑定状态,确认是否生效:
taskset -p <进程PID>

内容的提问来源于stack exchange,提问作者R71

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:27:04