您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第3章 进程管理实验
进程管理实验_1成都信息工程学院徐虹第3章进程管理实验•3.1实验目的•3.2准备知识•3.2.1基本概念进程管理实验_2成都信息工程学院徐虹3.2.2系统调用•图3-1系统调用的参数表方式进程管理实验_3成都信息工程学院徐虹3.2.3相关函数•intfork();•pid=fork();•if(pid0){•printf(forkerror\n);•exit(0);}•if(pid==0){•printf(Thechildprocessisrunningnow!\n);•exit(0);}进程管理实验_4成都信息工程学院徐虹•if(pid0){•printf(Theparentprocessisrunningnow!\n);•exit(0);}•#includesys/type.h•#includesys/wait.h•(pid_t)wait(int*statloc);进程管理实验_5成都信息工程学院徐虹图3-2父进程和子进程的内存映像进程管理实验_6成都信息工程学院徐虹•#includestdio.h•voidexit(intstatus);•kill(intPID,intIID);•#includesignal.h•intsig;•void(*func)();•signal(sig,function);进程管理实验_7成都信息工程学院徐虹信号功能值SIGHUP挂起1SIGINT键盘中断,键盘按Delete键或Break键2SIGQUIT键盘按Quit键3SIGILL非法指令4SIGTRAP跟踪中断5SIGIOTIOT指令6SIGBUS总线错7SIGFPE浮点运算溢出8SIGKILL要求终止进程9SIGUSR1用户定义信号#110SIGSEGV段违法11SIGUSR2用户定义信号#212SIGPIPE向没有读进程的管道上写13SIGALRM定时器告警,时间到14SIGTERMkill发出的软件结束信号15SIGCHLD子进程死17SIGCONT若已停止则继续18SIGPWR电源故障30进程管理实验_8成都信息工程学院徐虹•#includeunistd.h•pipe(intfp[2]);进程管理实验_9成都信息工程学院徐虹3.3实验内容•3.3.1编制实现软中断通信的程序•3.3.2编制实现进程的管道通信的程序进程管理实验_10成都信息工程学院徐虹3.3.1编制实现软中断通信的程序•Childprocess1iskilledbyparent!!•Childprocess2iskilledbyparent!!•Parentprocessiskilled!!•多运行几次编写的程序,简略分析出现不同结果的原因。进程管理实验_11成都信息工程学院徐虹3.3.2编制实现进程的管道通信的程序•使用系统调用pipe()建立一条管道线,两个子进程分别向管道写一句话:•Childprocess1issendingamessage!•Childprocess2issendingamessage!•而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。•要求:父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。进程管理实验_12成都信息工程学院徐虹3.4实验指导•3.4.1进程的软中断通信•3.4.2进程的管道通信进程管理实验_13成都信息工程学院徐虹3.4.1进程的软中断通信•#includestdio.h进程管理实验_14成都信息工程学院徐虹图3-3软中断通信程序流程图进程管理实验_15成都信息工程学院徐虹•#includesignal.h•#includeunistd.h•#includesys/types.h••intwait_flag;•voidstop();•main(){进程管理实验_16成都信息工程学院徐虹•intpid1,pid2;//定义两个进程号变量•signal(3,stop);//或者signal(14,stop);•while((pid1=fork())==-1);//若创建子进程1不成功,则空循环•if(pid10){//子进程创建成功,pid1为进程号进程管理实验_17成都信息工程学院徐虹•while((pid2=fork())==-1);//创建子进程2•if(pid20){•wait_flag=1;•sleep(5);//父进程等待5秒•kill(pid1,16);//杀死进程1进程管理实验_18成都信息工程学院徐虹•kill(pid2,17);//杀死进程2•wait(0);//等待第1个子进程1结束的信号•wait(0);//等待第2个子进程2结束的信号•printf(\nParentprocessiskilled!!\n);进程管理实验_19成都信息工程学院徐虹•exit(0);//父进程结束•}•else{•wait_flag=1;•signal(17,stop);//等待进程2被杀死的中断号17•printf(\nChildprocess2iskilledbyparent!!\n);进程管理实验_20成都信息工程学院徐虹•exit(0);•}•}•else{•wait_flag=1;•signal(16,stop);//等待进程1被杀死的中断号16•printf(\nChildprocess1iskilledbyparent!!\n);•exit(0);进程管理实验_21成都信息工程学院徐虹•}•}•voidstop(){•wait_flag=0;•}•Childprocess1iskilledbyparent!!•Childprocess2iskilledbyparent!!进程管理实验_22成都信息工程学院徐虹•Parentprocessiskilled!!•Childprocess2iskilledbyparent!!•Childprocess1iskilledbyparent!!•Parentprocessiskilled!!进程管理实验_23成都信息工程学院徐虹3.4.2进程的管道通信•#includeunistd.h•#includesignal.h•#includestdio.h•intpid1,pid2;//定义两个进程变量进程管理实验_24成都信息工程学院徐虹图3-4管道通信程序流程图进程管理实验_25成都信息工程学院徐虹•main(){•intfd[2];•charOutPipe[100],InPipe[100];//定义两个字符数组•pipe(fd);//创建管道•while((pid1=fork())==-1);//如果进程1创建不成功,则空循环进程管理实验_26成都信息工程学院徐虹•if(pid1==0){//如果子进程1创建成功,pid1为进程号•lockf(fd[1],1,0);//锁定管道•sprintf(OutPipe,\nChildprocess1issendingmessage!\n);•//给Outpipe赋值•write(fd[1],OutPipe,50);//向管道写入数据进程管理实验_27成都信息工程学院徐虹•sleep(5);//等待读进程读出数据•lockf(fd[1],0,0);//解除管道的锁定•exit(0);//结束进程1•}进程管理实验_28成都信息工程学院徐虹•else{•while((pid2=fork())==-1);//若进程2创建不成功,则空循环•if(pid2==0){•lockf(fd[1],1,0);•sprintf(OutPipe,\nChildprocess2issendingmessage!\n);•write(fd[1],OutPipe,50);进程管理实验_29成都信息工程学院徐虹•sleep(5);•lockf(fd[1],0,0);•exit(0);•}•else{进程管理实验_30成都信息工程学院徐虹•wait(0);//等待子进程1结束•read(fd[0],InPipe,50);//从管道中读出数据•printf(%s\n,InPipe);//显示读出的数据•wait(0);//等待子进程2结束进程管理实验_31成都信息工程学院徐虹•read(fd[0],InPipe,50);•printf(%s\n,InPipe);•exit(0);//父进程结束•}•}•}•Childprocess1issendingmessage!•Childprocess2issendingmessage!
本文标题:第3章 进程管理实验
链接地址:https://www.777doc.com/doc-4149201 .html