栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

OS实验八: 进程间通信实验(一)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

OS实验八: 进程间通信实验(一)

实验目的

1、了解什么是信号

2、熟悉LINUX系统中进程之间软中断通信的基本原理

实验内容

编写程序:用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:

Child process1 is killed by parent!

Child process2 is killed by parent!

父进程等待两个子进程终止后,输出如下的信息后终止:

Parent process is killed!

实验过程

一、信号

1、信号的基本概念

每个信号都对应一个正整数常量(称为signal  number,即信号编号。定义在系统头文件中),代表同一用户的诸进程之间传送事先约定的信息的类型,用于通知某进程发生了某异常事件。

信号机制具有以下三方面的功能:

(1)发送信号。发送信号的程序用系统调用kill( )实现;

(2)预置对信号的处理方式。接收信号的程序用signal( )来实现对处理方式的预置;

(3)收受信号的进程按事先的规定完成对相应事件的处理。

二、所涉及的中断调用

1、kill( )

系统调用格式

int  kill(pid,sig)

参数定义

int  pid,sig;

其中,pid是一个或一组进程的标识符,参数sig是要发送的软中断信号。

2、signal( )

预置对信号的处理方式,允许调用进程控制软中断信号。

系统调用格式

signal(sig,function)

头文件为

                 #include

参数定义

signal(sig,function)

int  sig;

void (*func) ( )

其中sig用于指定信号的类型,function:在该进程中的一个函数地址

三、参考程序

#include 
#include 
#include 

void waiting( ),stop( );
int wait_mark;
main( )
{
int p1,p2,stdout;
while((p1=fork( ))= =-1);       
if (p1>0)
            {
while((p2=fork( ))= =-1);     
if(p2>0)
{
                    wait_mark=1;
signal(SIGINT,8。vstop);   
waiting( );
kill(p1,16);        
kill(p2,17);        
wait(0);           
wait(0);
printf("Parent process is killed!n");
exit(0);
}
           else
             {
                    wait_mark=1;
signal(17,stop);   
lockf(stdout,1,0);
printf("Child process 2 is killed by parent!n");
lockf(stdout,0,0);
exit(0);
}
}
else
{
wait_mark=1;
signal(16,stop);        
lockf(stdout,1,0);
printf("Child process 1 is killed by parent!n");
lockf(stdout,0,0);
exit(0);
}
   }

void waiting( )
{
 while(wait_mark!=0);
}

void stop( )
{
wait_mark=0;
}

实际运行结果:
Child process1 is killed by parent!
Child process2 is killed by parent!
 四、理论运行结果 

屏幕上无反应,按下^C后,显示 

Child process1 is killed by parent!

Child process2 is killed by parent!

Parent  process  is  killed!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/467567.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号