2017-01-24 3 views
1

sched_setscheduler()을 사용하여 주어진 프로세스의 스케줄링 정책을 설정하려고합니다. 해당 man page에 따라 사용 가능한 플래그는 SCHED_FIFO,SCHED_RR,SCHED_OTHER,SCHED_BATCH,SCHED_IDLE입니다.스케줄 정책 플래그 SCHED_BATCH 또는 SCHED_IDLE을 사용하면 오류가 발생합니다.

SCHED_BATCHSCHED_IDLE을 제외한 모든 플래그를 사용하고 프로그램을 성공적으로 컴파일 할 수 있습니다. 그러나, 말, SCHED_BATCH를 사용하여, 나는 내 문제를 설명하기 위해

error: ‘SCHED_BATCH’ undeclared (first use in this function) 
sched_setscheduler(getpid(),SCHED_BATCH,&param); 

샘플 코드를 얻을 것은 :

맨 페이지에서 언급 한 바와 같이
#include<stdio.h> 
#include<unistd.h> 
#include<sched.h> 
#include<time.h> 
#include<stdlib.h> 
#include<sys/types.h> 
int main() 
{ 
    struct sched_param p; 
    p.sched_priority=0; 
    sched_setscheduler(getpid(),SCHED_BATCH,&p); 
    return 0; 
} 

, 나는 typr sched_param의 객체를 생성 설정 해당 sched_priority 값을 가져 와서 함수에 전달합니다.

제 리눅스 커널 버전은 4.4.40이고, 우분투 14.04.5 LTS를 사용하고 있습니다. 내 gcc 버전은 6.2.0입니다.

어떻게 해결할 수 있습니까?

답변

3

SCHED_BATCHSCHED_IDLE은 Linux에만 해당하며 POSIX 표준에 속하지 않습니다.

_GNU_SOURCE을 정의하지 않는 한 Glibc는 노출하지 않습니다. 따라서 다음을 수행하십시오.

#define _GNU_SOURCE 

헤더를 포함하기 전에 수행하십시오.

+0

고마워요! 그게 효과가 있었어. 좀 더 자세한 내용을 읽을 수 있도록 참조 할 수있게 해주시겠습니까? – GoodDeeds

+0

POSIX doc [here] (http://pubs.opengroup.org/onlinepubs/9699919799//basedefs/sched.h.html)을 확인할 수 있습니다. AFAIC,'_GNU_SOURCE'에 의해 가능해진 추가적인 특징/확장은 잘 설명되어 있지 않습니다. 이것은 대개 개별 man 페이지에서 찾아 볼 수 있습니다. –