进程调度算法程序

来源:互联网 发布:mac软件免费下载平台 编辑:程序博客网 时间:2024/06/03 00:11

#include<stdio.h>
#include<stdlib.h>
#include<sched.h>
#include<signal.h>
#include<sys/time.h>
#include<sys/resource.h>
#define SIGINT 2
#define SIGSTP 20
/*实验要求:
 设有两个并发执行的父子进程,不断循环输出各自进程号、优先数和调度策略。
进程初始调度策略均为系统默认策略和默认优先级。当某个进程收到 SIGINT 信号
时会自动将其优先数加 1,收到 SIGTSTP 信号时会自动将其优先数减 1。
*/
/*
 实验中父进程处理SIGINT信号,子进程处理SIGSTP信号。
*/
void do_sigstp(int signo){//收到SIGSTP则优先级-1
 setpriority(PRIO_PROCESS,getpid(),getpriority(PRIO_PROCESS,getpid())-1);
}
void do_sigint(int signo){//收到STPINT则优先级+1
 setpriority(PRIO_PROCESS,getpid(),getpriority(PRIO_PROCESS,getpid())+1);
}

int main(int argc,char *argv[]){
 pid_t pid = fork();
 if(pid<0)
  printf("create  process error");
 if(pid==0){
  setpriority(PRIO_PROCESS,getpid(),10);
  signal(SIGSTP,do_sigstp);//子进程只接收信号SIGSTP
  signal(SIGINT,SIG_IGN);//忽略信号SIGINT
 }else{
  signal(SIGINT,do_sigint);//父进程接收信号SIGINT
  signal(SIGSTP,SIG_IGN);//忽略信号SIGSTP
 }

 while(1){
  if(pid>0)
   printf("I am parent process  ");
  else
   printf("I am child process   ");
  printf("pid=%d,   priority=%d,  scheduler=%d/n",getpid(),getpriority(PRIO_PROCESS,getpid()),sched_getscheduler(getpid()));
  sleep(2);
 }
}

原创粉丝点击