- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2019-05-29T16:41:47+09:00","default:honma","honma")
* sched_getattr [#xc39e4ea]
スケジューリングポリシーやパラメータを取得する
#highlight(c){{
#include <stdio.h>
#include <stdlib.h>
#include <sched.h>
#include <errno.h>
#include <unistd.h>
#include <sys/syscall.h>
typedef unsigned long long u64;
typedef unsigned int u32;
typedef int s32;
struct sched_attr {
u32 size;
u32 sched_policy;
u64 sched_flags;
/* SCHED_NORMAL, SCHED_BATCH */
s32 sched_nice;
/* SCHED_FIFO, SCHED_RR */
u32 sched_priority;
/* SCHED_DEADLINE */
u64 sched_runtime;
u64 sched_deadline;
u64 sched_period;
};
#define sched_getattr(pid, attr, size, flags) syscall(__NR_sched_getattr, pid, attr, size, flags)
void get_prio(void)
{
int ret;
int policy;
struct sched_param param;
struct sched_attr attr;
policy = sched_getscheduler(0);
printf("policy = %d\n", policy);
ret = sched_getparam(0, ¶m);
if (ret == 0) {
printf("sched_priority = %d\n", param.sched_priority);
}
else {
perror("sched_getparam");
}
/*
* sched_getattr() は glibcラッパー関数がないので自分で syscall() する
*/
ret = sched_getattr(0, &attr, sizeof(attr), 0);
if (ret == 0) {
printf("sched_policy = %d\n", attr.sched_policy);
printf("sched_nice = %d\n", attr.sched_nice);
printf("sched_priority = %d\n", attr.sched_priority);
}
else {
perror("sched_getattr");
}
}
int main(int argc, char **argv)
{
get_prio();
/* キー入力待ち */
getchar();
get_prio();
/* キー入力待ち */
getchar();
return 0;
}
}}
#highlight(end)
[[ソースコード]]
実行結果
$ ./sched_get_prio
policy = 0
sched_priority = 0
sched_policy = 0
sched_nice = 0
sched_priority = 0
※ reniceで nice値を変えてみる
policy = 0
sched_priority = 0
sched_policy = 0
sched_nice = 1
sched_priority = 0
別のターミナルから renice を実行
$ cat /proc/`pidof sched_get_prio`/sched | grep -e policy -e prio
sched_get_prio (93999, #threads: 1)
policy : 0
prio : 120
$ cat /proc/`pidof sched_get_prio`/stat | awk -F' ' '{print $18,$19}'
20 0
$ sudo renice -n 1 -p `pidof sched_get_prio`
[sudo] ****** のパスワード:
93999 (process ID) old priority 0, new priority 1
$ cat /proc/`pidof sched_get_prio`/sched | grep -e policy -e prio
sched_get_prio (93999, #threads: 1)
policy : 0
prio : 121
$ cat /proc/`pidof sched_get_prio`/stat | awk -F' ' '{print $18,$19}'
21 1
#htmlinsert(amazon_book.html);