Part3. 进程通信
往期回顾:
Part0. 实验环境
Part1-1.熟悉UKylin环境
Part1-2.熟悉UKylin环境
Part2.进程控制
UNIX/LINUX系统的进程间通信机构(IPC)允许在任意进程之间大批量地交换数据。本实验的目的是了解和熟悉Linux支持的信号量机制。
一、实验目的
1.了解什么是信号,熟练掌握signal(),wait(),exit(),kill()函数。
2.熟悉并掌握Linux系统中进程之间采用软中断通信的基本原理。
二、实验内容
1.编写一段程序,使用系统调用fork( )创建两个子进程,再用系统调用signal( )进行预置,让父进程捕捉由键盘发来的中断信号(即同时按下Ctrl+C键)。当系统捕捉到中断信号后,调用预置的stop函数,子进程捕捉到信号后,分别输出下列信息后终止:
Child process 1 is interrupted by parent!
Child process 2 is interrupted by parent!
父进程等待两个子进程终止后,输出以下信息后终止:
Parent process is interrupted!
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<sys/wait.h>
#include<stdlib.h>
int wait_mark=0; //定义一个全局变量wait_mark,初值为0
/******************定义函数******************
*函数名:stop *
*函数功能:一旦捕获到Ctrl C 后转去执行的 *
函数,将全局变量wait_mark的值*
设为1 *
**********************************************/
void stop()
{
wait_mark=0;//预置一个wait_mark的值
}
/******************定义函数******************
*函数名:waiting *
*函数功能:执行while(wait_mark!=0)语句 *
一直循环测试 *
**********************************************/
void waiting()
{
while(wait_mark!=0); //若wait_mark不为0,则一直循环
}
/******************主函数*******************/
int main()
{
int p1, p2;
signal(SIGINT,stop); //预置函数signal()初始位置,捕获到从键盘键入的Ctrl+C中断信号后,转到执行stop函数
while((p1=fork())==-1); //父进程调用fork()函数创建子进程p1
if(p1>0