1.实验目的
通过本实验,掌握软中断的基本原理;掌握中断信号的使用、进程的创建以及系统计时器的使用。
2.实验内容(上交的实验2统一取名为:test2)
由父进程创建两个子进程,通过终端输入Crtl+\组合键向父进程发送SIGQUIT软中断信号或由系统时钟产生SIGALRM软中断信号发送给父进程;父进程接受到这两个软中断的其中某一个后,向其两个子进程分别发送整数值为16和17软中断信号,子进程获得对应软中断信号后,终止运行;父进程调用wait()函数等待两个子进程终止,然后自我终止。
3. 设计思想及算法流程
代码:
#include #include void waiting() { while(wait!=0); } void stop() { wait=0; } int wait; void main() { int p1,p2; /*定义两个进程号变量*/ while((p1=fork())==-1); /*循环创建进程至成功为止*/ if(p1==0) { signal(SIGQUIT,SIG_IGN); wait=1; /*将等待标记置1直到中断信号刺激stop*/ signal(16,stop); /*接收到软中断信号16,转stop*/ waiting();/*在wait置0前,不可往下执行*/ lockf(1,1,0); printf("Child process 1 is killed by parent!\\n");/*接收到父进程发送信号后,父进程杀死子进程1*/ lockf(1,0,0); /*解锁*/ exit(0);/*子进程1退出*/ } else/*第二个子进程在判断为父进程后再创建.这样可以避免了在第一进程中再次创建下一级的一个子进程*/ { while((p2=fork())==-1); if(p2==0) { signal(SIGQUIT,SIG_IGN); wait=1; /*将等待标记置1直到中断信号刺激stop*/ signal(17,stop); /*接收到软中断信号17,转stop*/ waiting();/*在wf置0前,不可往下执行*/ lockf(1,1,0); /*加锁*/ printf("Child process 2 is killed by parent!\\n"); lockf(1,0,0); exit(0); /*子进程2退出*/ } else { wait=1; /*将等待标记置1直到中断信号刺激stop*/ signal(SIGQUIT,stop); /*若捕捉到键盘上来的中断信号转stop*/ waiting(); kill(p1,16); /*向子进程p1发软中断信号16*/ kill(p2,17); wait(0); /*等待子进程死信号*/ wait(0); printf("Parent process is killed!\\n");/*接收到子进程死信号后,杀死父进程*/ exit(0); /*父进程退出*/ } } } 运行结果 N下载本文