【发布时间】:2020-08-14 12:37:36
【问题描述】:
有没有办法检查给定的 PID 是否与内核空间中的任何进程匹配?
我正在构建一个系统调用来更改自定义加权循环调度程序的权重。
我想在调用find_task_by_vpid(pid) 之前进行检查,以避免在 PID 无效(即没有进程具有此 PID 值)时调用该函数。
这是因为如果使用了无效的 PID,我的虚拟机就会崩溃。所以我想做一个检查并将错误值-ESRCH返回给用户空间。
有检查功能吗?
或者是否可以检查find_task_by_vpid(pid) == NULL是否可以确定PID是否有效?当pid 无效时,我找不到指定find_task_by_vpid(pid) 的返回值的文档。
SYSCALL_DEFINE2(set_wrr_weight, pid_t, pid, int, weight){
struct sched_wrr_entity *wrr_se;
// I want to do a check here to see if given pid is valid or not
wrr_se = &find_task_by_vpid(pid)->wrr;
wrr_se->wrr_weight = weight;
return 0;
}
【问题讨论】:
-
1) 您使用的是哪个内核版本? 2) 我相信
rr_se应该是wrr_se? 3) 什么是sched_wrr_entity? AFAIK 不存在,task_struct上的wrr字段也不存在。你真的需要任务结构在你的系统调用中使用它吗? -
内核 4.19.105;我正在构建一个自定义加权循环任务调度程序,因此将 wrr_se 和 sched_wrr_entity 自定义添加到内核中; Sched_wrr_entity 包含字段“struct list_head list; unsigned int wrr_weight; unsigned int time_slice”。所以我需要使用系统调用访问和更改该特定进程的 wrr_weight。
标签: c kernel system-calls pid