Не удается установить политику планирования с помощью функции sched_setscheduler ()?

Я новичок в программировании ОС. Итак, я написал этот код, чтобы изменить политику планирования фонового процесса, идентификатор процесса которого я предоставляю с помощью аргумента командной строки, но функция sched_setscheduler () не работает, выдавая ошибку «Функция не реализована»,

#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
", 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
", new_policy);
}

Может кто-нибудь, пожалуйста, скажите мне, почему это происходит? Благодарю.

process,operating-system,scheduling,job-scheduling,priority,

3

Ответов: 1


0

Итак, я написал этот код, чтобы изменить политику планирования фонового процесса, чей идентификатор процесса, который я передаю с помощью аргумента командной строки

Вот проблема. sched_setscheduler(2)получает идентификатор потока, а не идентификатор процесса . Для процессов с одним потоком PIDи TIDсовпадают, но в многопоточных процессах каждый поток имеет свои собственные TID.

Тот факт, что аргумент назван pidи имеет тип, pid_tможет вводить в заблуждение и даже некоторые старые man-страницы sched_setscheduler(2)ошибочно говорят о процессах, но эта функция фактически связана с потоками.

процесс, операционная система, планирование, работа-планирование, приоритет,
Похожие вопросы