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