操作系统——实验三(进程间通信)——3.3.2

操作系统——实验三(进程间通信)——3.3.2

实验目的

1、了解linux系统中进程通信的基本原理。

2、分析进程竞争资源现象,学习解决进程互斥的方法。


3.3.2——软中断通信(选做)

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

childprocess1iskilledbyparent!

childprocess2iskilledbyparent!

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

parentprocessiskilled!

第一步

创建c文件夹,在它下面创建hello.c文件

mkdir c
vim test.c

第二步

写入参考程序

程序

#include
#include
#include

voidwaiting(),stop();
intwait_mark;

main()
{
intp1,p2;
if(p1=fork())/*创建子进程p1*/
{
if(p2=fork())/*创建子进程p2*/
{
wait_mark=1;
signal(SIGINT,stop);/*接收到^c信号,转stop*/
waiting();
kill(p1,16);/*向p1发软中断信号16*/

kill(p2,17);/*向p2发软中断信号17*/

wait(0);/*同步*/
wait(0);
printf("parentprocessiskilled!\n");
exit(0);
}
else
{
wait_mark=1;
signal(SIGINT,stop);
waiting();
lockf(1,0,0);
printf("childprocess2iskilledbyparent!\n");
lockf(1,0,0);
exit(0);
}
}
else
{
wait_mark=1;
signal(SIGINT,stop);
waiting();
lockf(1,0,0);
printf("childprocess1iskilledbyparent!\n");
lockf(1,0,0);
exit(0);
}
}
voidwaiting()
{
while(wait_mark!=0);
}
voidstop()
{
wait_mark=0;
}

编译程序

gcc -o test  test.c

记录结果

结果分析

因为fork()创建进程的速度慢于输出字符,所以先输出child后输出parent

如有错误请指证

 

 

 

 

 

 

 

 

你可能感兴趣的:(计算机基础,Linux,操作系统笔记,操作系统,linux,多进程,多线程)