一、设计目的
(1)加深对进程概念的理解,明确进程和程序的区别。
(2)进一步认识并发执行的实质。
(3)分析进程争用资源的现象,学习解决进程互斥的方法。
(4)了解Linux系统中进程通信的基本原理。
二、设计内容
1)进程的软中断通信
①编制一段程序,使其实现进程的软中断通信。
要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉
键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:
Child Proeess 1 is Killed by Parent!
Child Process 2 is Killed by Parent!
父进程等待两个子进程终止后,输出如下的信息后终止:
Parent Process is Killed!
②在上面的程序中增加语句signal(SIGINT,SIG_IGN)和signal(SIGQUIT,SIG _IGN),观察执行结果,并分析原因。
2)进程的管道通信
编制一段程序,实现进程的管道通信。
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道各写一句话:
Child l is sending a message!
Child 2 is sending a message!
而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。
要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。
三、指导步骤
1)进程的软中断通信
<任务1>
编制一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键),当捕捉到中断信号后,父进程用系统调用kill() 向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:
child process l is killed by parent!
child process 2 is killed by parent!
父进程等待两个子进程终止后,输出以下信息后终止:
parent process is killed!
(程序)
/*e-1-31*/
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdio.h>