无法使用sched_setscheduler()函数设置调度策略?

时间:2017-11-18 21:49:11

标签: process operating-system scheduling job-scheduling

我是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, &param) == -1){
        perror("Scheduler policy cannot be set");
    }
    int new_policy = sched_getscheduler(pid);
    printf("New policy: %d\n", new_policy);
}

有人可以告诉我为什么会这样吗?感谢。

1 个答案:

答案 0 :(得分:0)

  

因此,我编写了这段代码来更改后台进程的调度策略,该进程的进程ID是我通过命令行参数提供的

这是问题所在。 sched_setscheduler(2)获取的是线程ID ,而不是进程ID 。对于单线程进程,PIDTID是重合的,但是在多线程进程中,每个线程都有自己的TID

参数名为pid且类型为pid_t的事实可能会产生误导,甚至sched_setscheduler(2)的一些旧手册页都在错误地谈论过程,但是此功能实际上是关于线程。