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

wenyubo wenyubo 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
路过的技术牛人,想请教一个问题。我想用fork产生3个子进程,分别执行不同的任务。并且给他们设定不同的优先级,让他们按照优先级执行。
我的代码在下面。进程1,child1的优先级是14.child2的优先级是10.child3的优先级是-3.按道理应该是子进程child3先执行。

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<sys/time.h>
#include<sys/resource.h>
#include<sys/types.h>


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

}
}

}

执行结果是:
先执行1,再 2,再3
...全文
评论 9
收藏 已收藏
分享
返回顶部
wenyubo
Linux/Unix社区 23,224 成员 74,535 内容