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

内核模块实现用户态调度器调用kill_pid报隐式声明错误如何解决

报错原因
  • 缺失kill_pid函数声明对应的头文件,你当前引入的<linux/sched.h>和<linux/pid.h>未包含该函数定义,因此触发隐式声明报错。
  • 你对kill_pid的调用不符合内核API要求:该函数第一个入参要求是struct pid *类型的PID结构体指针,你传入的是pid_t类型的数值PID;同时该函数要求传入3个参数,你仅传入了2个。
修复步骤
  1. 新增头文件引入
#include <linux/signal.h>
  1. 修正kill_pid调用逻辑
    你需要先将pid_t类型的数值PID转换为内核struct pid结构体指针,再调用kill_pid发送信号,使用完后释放PID结构体的引用,修改后的代码片段如下:
list_for_each_entry_safe(cursor, temp, &current_UMS->scheduler_thread, next)
{   
    struct pid *pid_struct = find_get_pid(cursor->pid);
    if (pid_struct) {
        // 第三个参数1表示内核态特权发送信号,跳过权限校验
        kill_pid(pid_struct, SIGTERM, 1);
        put_pid(pid_struct);
    }
    list_del(&cursor->next);
    kfree(cursor);
}
额外注意事项

如果你的内核版本高于5.14,kill_pidAPI已被移除,可以替换为更通用的send_sig实现相同逻辑:

struct task_struct *task = pid_task(find_get_pid(cursor->pid), PIDTYPE_PID);
if (task) {
    send_sig(SIGTERM, task, 1);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 17:54:05