为什么用sched_setscheduler设置子程序的优先级不成功?

fly-alone 2008-06-24 11:37:03
源码:
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<sched.h>
#include<sys/time.h>
#include<sys/resource.h>
int main(int argc,char *argv[])
{
unsigned int i=0,j=0,k=0,h;

int pid[1];
struct sched_param p[1];
for(i=0;i<1;i++)
{
if((pid[i]=fork())>0)
{
p[i].sched_priority=99;
h=sched_setscheduler(pid[i],SCHED_FIFO,&p[i]);
if(errno)
perror("sched_setscheduler");
while(k<1)
{
k++;
sched_getparam(0,p);
if(errno)
perror("sched_getparam");
printf("Child %d policy is %d, prio: %d, return: %d\n",getpid(),sched_getscheduler(pid[i]),p[0].sched_priority,h);
}
}
else{
while(j<1)
{
j++;
sched_getparam(0,p);
if(errno)
perror("sched_getparam");
printf("Perant PID =%d, policy:%d, prio:%d\n",getpid(),sched_getscheduler(getpid()),p[0].sched_priority);
}
}
}

return EXIT_SUCCESS;
}


执行结果:

Perant PID =7123, policy:0, prio:0
Child 7122 policy is 1, prio: 0, return: 0

为什么优先级都是0?子程序我明明设的是99
...全文
1220 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
roger_rao 2012-03-07
  • 打赏
  • 举报
回复
请确保你执行的时候有root权限。
修改进程到更高的优先级或者更高的调度级别(实时),是需要root权限的。
检查方法:
int ret;
ret = sched_setscheduler(pid[i],SCHED_FIFO,&p[i]);
if(ret<0){
printf("set scheduler failed.\n");
}
wenyubo 2011-07-11
  • 打赏
  • 举报
回复
你好,我也是碰到和你一样的问题,你是3年前的,现在我问题不知道你会不会回答我啊
fly-alone 2008-06-24
  • 打赏
  • 举报
回复
谁知道,帮帮我!
谢谢!
fly-alone 2008-06-24
  • 打赏
  • 举报
回复
摘自linux 2.6 manu:
...
sched_priority can have a value in the range 0 to 99.
...
fly-alone 2008-06-24
  • 打赏
  • 举报
回复
难道搞错了?
linux2.6优先级为0-139,其中100-139为普通进程,0-99为实时进程。
air_snake 2008-06-24
  • 打赏
  • 举报
回复
范围-20到+20

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧