我是OS编程的新手。所以,我编写了这段代码来改变后台进程的调度策略,后台进程的进程ID通过命令行参数提供,但是sched_setscheduler()函数失败,给出错误,&#34;函数未实现&#34; < / p>
#include <sched.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]){
struct sched_param param;
param.sched_priority = 80;
int pid = atoi(argv[1]);
int policy = sched_getscheduler(pid);
printf("Current policy: %d\n", policy);
if(sched_setscheduler(pid, SCHED_FIFO, ¶m) == -1){
perror("Scheduler policy cannot be set");
}
int new_policy = sched_getscheduler(pid);
printf("New policy: %d\n", new_policy);
}
有人可以告诉我为什么会这样吗?感谢。
答案 0 :(得分:0)
因此,我编写了这段代码来更改后台进程的调度策略,该进程的进程ID是我通过命令行参数提供的
这是问题所在。 sched_setscheduler(2)
获取的是线程ID ,而不是进程ID 。对于单线程进程,PID
和TID
是重合的,但是在多线程进程中,每个线程都有自己的TID
。
参数名为pid
且类型为pid_t
的事实可能会产生误导,甚至sched_setscheduler(2)
的一些旧手册页都在错误地谈论过程,但是此功能实际上是关于线程。