进程调度算法程序

    技术2022-05-20  40

    #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); }}


    最新回复(0)