当前位置:  技术问答>linux和unix

你敢吗?抛砖引玉的问题,值得一看

    来源: 互联网  发布时间:2016-12-13

    本文导语:  路过的技术牛人,想请教一个问题。我想用fork产生3个子进程,分别执行不同的任务。并且给他们设定不同的优先级,让他们按照优先级执行。 我的代码在下面。进程1,child1的优先级是14.child2的优先级是10.child3的优...

路过的技术牛人,想请教一个问题。我想用fork产生3个子进程,分别执行不同的任务。并且给他们设定不同的优先级,让他们按照优先级执行。
我的代码在下面。进程1,child1的优先级是14.child2的优先级是10.child3的优先级是-3.按道理应该是子进程child3先执行。

#include
#include
#include
#include
#include
#include


void main()
{
    pid_t father,child1,child2,child3;
    int prio;
    father=getpid();
    setpriority(PRIO_PROCESS,0,20);
    //nice(10);
    printf("the father ID is : %dn",father);
    prio=getpriority(PRIO_PROCESS,0);
    printf("the father priority is %dn",prio);
    child1=fork();
    if(child1==0) {
        setpriority(PRIO_PROCESS,0,14);
        prio=getpriority(PRIO_PROCESS,0);
        printf("the child one ID is : %dn",getpid());
        printf("the child one priority is %dn",prio);
    }
    else if(child1>0){
        child2=fork();
        if(child2==0) {
            setpriority(PRIO_PROCESS,0,10);
            prio=getpriority(PRIO_PROCESS,0);
            printf("the child two ID is : %dn",getpid());
            printf("the child two priority is %dn",prio);
        }
        else if(child2>0){
            child3=fork();
            if(child3==0) {
                setpriority(PRIO_PROCESS,0,-3);
                prio=getpriority(PRIO_PROCESS,0);
                printf("the child three ID is : %dn",getpid());
                printf("the child three priority is %dn",prio);
            }
            else if(child3>0) {
                printf("my ID is %dn",getpid());
                printf("my prio  is %dn",getpriority(PRIO_PROCESS,0));
            }
            
        }
    }

}

执行结果是:
先执行1,再 2,再3

|

#include
#include
#include
#include
#include
#include
#include


void main()
{
  pid_t father,child1,child2,child3;
  int prio;
  int rt,curr_policy;
  struct sched_param my_params;

  my_params.sched_priority=sched_get_priority_max(SCHED_RR);

  father=getpid();
  curr_policy=sched_getscheduler(father);
  printf("SCHED_OTHER = %d SCHED_FIFO =%d SCHED_RR=%d n",SCHED_OTHER,SCHED_FIFO,SCHED_RR);
  printf("the current scheduler = %d n",curr_policy);

  rt=sched_setscheduler(0,SCHED_RR,&my_params);
  if(rt0){
  child2=fork();
  if(child2==0) {
  curr_policy=sched_getscheduler(child2);
  printf("child2 scheduler = %d n",curr_policy);
  setpriority(PRIO_PROCESS,0,10);
  prio=getpriority(PRIO_PROCESS,0);
  printf("the child two ID is : %dn",getpid());
  printf("the child two priority is %dn",prio);
  }
  else if(child2>0){
  child3=fork();
  if(child3==0) {
  curr_policy=sched_getscheduler(child3);
  printf("child2 scheduler = %d n",curr_policy);
  setpriority(PRIO_PROCESS,0,-3);
  prio=getpriority(PRIO_PROCESS,0);
  printf("the child three ID is : %dn",getpid());
  printf("the child three priority is %dn",prio);
  }
  else if(child3>0) {
  printf("my ID is %dn",getpid());
  printf("my prio is %dn",getpriority(PRIO_PROCESS,0));
  }
   
  }
  }

}


试了下SCHED_RR实时调度策略,结果还是不行。
我也一直相信4楼大哥说的“你是在子进程起来之后,再修改的子进程的优先级,这样做可能晚了。因为你修改进程3的优先级时,进程2可能都已经执行完了。。。”
如果有什么特别需要只能靠signal了来同步了。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 简单问题简单问题简单问题简单问题
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • 小问题,急问题,重大问题!!!
  • sharepoint 2010中item.Update()和item.SystemUpdate 修改数据版本问题解决
  • 弱弱的一问,linux下的中文问题及网络问题,分不是问题
  • 八个问题帮你快速了解Docker
  • 请教两个小问题:一个cgywin下使用vi的问题,另一个socket的问题
  • 错误:将'const x'作为'x'的'this'实参时丢弃了类型限定问题解决
  • 网页的编码问题!或者java的编码问题,由此引出一条解决中文问题的思路
  • nginx Windows版相关问题及使用说明
  • 死锁的问题 多级锁定问题 循环锁定问题
  • vs2010下禁用vmware的方法以及解决vmware插件导致vs2010变慢的问题
  • [问题]双系统出现的问题!求问题的原因和解决办法!
  • Linux下时钟同步问题:Clock skew detected原因分析及解决方法
  • 初学者问题。一个是编译hello world的问题,一个是配置ssh的问题
  • c/c++服务器程序内存泄露问题分析及解决
  • C程序问题:哪个高手帮我解释下下面的问题,主要是a[0]和&[0] 的区别 和编译器的问题??
  • ​部署 Docker 前必须问自己的四个问题
  • swing的问题还是jbuiler的问题??
  • spring的事务类型及spring和hibernate可能导致的问题分析
  • 菜鸟第一次安装红帽子7.2的一箩筐问题。每个问题会开个帖子,各放100分!请有安装经验的老鸟们帮忙解决。第二个问题:什么是LILO?怎么样


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3