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