Pages

Friday, June 15, 2012

pthread_setschedparam 가 EPERM 리턴 하는 경우

process의 우선순위를 변경할 권한이 없기 때문이다.

리눅스에서

리눅스에는 /etc/security/limits.conf 파일에 설정하면된다.

참고 : http://stackoverflow.com/questions/8111302/why-does-pthread-setschedparam-produce-eperm-on-opensuse-11-4


안드로이드 에서

안드로이드에서는 다른 방법을 사용한다.
Init 문법중에 setrlimit 라는 Command를 사용하여 limit를 해제해준다.

setrlimit <resource> <cur> <max>

resource 중 priority 관련 항목은 RLIMIT_RTPRIO인데 정수로 14(bionic/libc/kernel/common/asm-generic/resource.h 참고)값을 가지고 있다.
그러므로 다음과 같은 라인을 Init.rc에 추가하면 limit 값을 설정해줄 수 있다.

setrlimit 14 99 99

설정이 정상적으로 됐는지 확인 하는 방법은 ulimit 명령을 사용하면 된다.
ulimit -r 값이 99로 되어 있으면 제한이 정상적으로 풀린것이다.

이렇게 설정하면 root 계정이 아니더라도 pthread_setschedparam을 이용하여 process의 우선순위를 변경 할 수 있다.