《操作系统》实验报告
姓名 | Rhyme | 学号 | 10086 | |
实验序号 | 4 | 实验名称 | 软中断信号及处理 | |
实验目的 | 1. 了解Linux系统中进程软中断通信的基本原理 2. 了解并熟悉Linux系统中利用软中断信号实现进程通信的基本概念及方法 3. 熟悉Linux提供的有关系统调用函数/库函数,并能使用这些函数 | |||
实验内容 | ||||
实验题目(1) | 1.利用sleep、pause、alarm函数设定闹钟,定时显示信息。题目内容 | |||
实验代码、实验过程(界面方式下的抓图)、实验结果(抓图) | 阅读并运行程序并回答以下问题: 问题1:红色部分的含义是什么?此时alarm还剩下多少时间? 含义发出SIGALRM信号,还剩10s 问题2:蓝色部分的含义是什么? 挂起进程,直到捕捉到一个信号 问题3:程序的运行结果是什么,为什么运行结果中没有最后一个printf语句的输入内容? 因为进程没有被唤醒就被终止了 问题4:请在该程序上添加一个signal()函数捕捉信号,并进行信号处理,使程序显示“I have been waken up”。 #include<unistd.h> #include<stdio.h> #include<stdlib.h> #include<signal.h> int main(){ int ret; alarm(50); sleep(30); ret=alarm(10); printf("%d\n",ret); signal(SIGALRM,alarm); pause(); printf("I have been waken up.\n"); } | |||
实验心得(遇到什么问题,如何解决) | 看PPT和文档学习各个函数作用 | |||
实验题目(2) | 父进程通过kill()向子进程发送信号 | |||
实验代码、实验过程(界面方式下的抓图)、实验结果(抓图) | 问题1:红色部分的含义是什么? 等待pid退出 问题2:若不添加红色程序会出现什么情况? 主进程会先于子进程结束 | |||
实验心得(遇到什么问题,如何解决) | ||||
实验题目(3) | 3.编制一段程序,使其实现进程的软中断通信。 | |||
实验代码、实验过程(界面方式下的抓图)、实验结果(抓图) | 要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按ctrl-c键);当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child process 1 is killed by parent! Child process 2 is killed by parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent process is killed! #include <unistd.h> #include <stdio.h> #include <signal.h> void waiting(); void stop(); void keep_alive(); int wait_mark; int main(){ int p1,p2; while((p1=fork())==-1); if(p1>0){ while((p2=fork())==-1); if(p2>0){ printf("parent\n"); wait_mark=1; signal(SIGINT, stop); waiting(); kill(p1, SIGINT); kill(p2, SIGINT); wait(0); wait(0); printf("parent process is killed children and exit!\n"); exit(0); }else{ printf("p2\n"); //wait_mark=1; signal(SIGINT, keep_alive); pause(); printf("child process2 is killed by parent!\n"); exit(0); } }else{ printf("p1\n"); //wait_mark=1; signal(SIGINT, keep_alive); pause(); printf("child process1 is killed by parent!\n"); exit(0); } } void waiting(){ while(wait_mark!=0); } void stop(){ wait_mark=0; } void keep_alive(){ } 阅读并运行程序并回答以下问题: 问题1:红色部分的含义是什么? 接收Ctrl+C 问题2:程序的运行结果是什么? | |||
实验心得(遇到什么问题,如何解决) | ||||