计算机操作系统实验资料

操作系统实验报告课程名称操作系统班级物联网一班名姓号学实验名称进程间的通信实验序号31.实验目的及要求①了解什么是信号。②熟悉LINUX系统中进程之间软中断通信的基本原理。2.实验环境VMwareWorkstation12Player3.实验内容①编写一段程序,使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止:Childprocess1iskilledbyparent!Childprocess2iskilledbyparent!父进程等待两个子进程终止后,输出以下信息后终止:Parentprocessiskilled!②程序实例#include#include#includeintwait_mark;voidwaiting();voidstop();voidmain(){intp1,p2;signal(SIGINT,stop);//signal()初始位置while((p1=fork())==-1);if(p1>0){signal(SIGINT,stop);while((p2=fork())==-1);if(p2>0){signal(SIGINT,stop);wait_mark=1;waiting();kill(p1,10);kill(p2,12);wait();wait();printf(parentprocessiskilled!\n);exit(0);}else{wait_mark=1;signal(12,stop);waiting();lockf(1,1,0);printf(childprocess1iskilledbyparent!\n);lockf(1,0,0);exit(0);}}else{wait_mark=1;signal(10,stop);waiting();lockf(1,1,0);printf(childprocess2iskilledbyparent!\n);lockf(1,0,0);exit(0);}}voidwaiting(){while(wait_mark!=0);}voidstop(){wait_mark=0;}③程序结果以及分析分析:程序执行时,首先会先在父程序中创建一个子程序,然后父程序向子程序发送一个信号(kill方法),子进程在接收到父程序发送的信号后,会在控制台打印一句话,这时因为有两个子进程接收到信号,他们都要对控制台操作,这时会发生互斥操作。lockf(1,1,0);printf(childprocess2iskilledbyparent!\n);lockf(1,0,0);再打印后子程是分别加锁和解锁操作,lockf(1,0,0)和lockf(1,1,0).序会退出。在程序中加入wait()是等待两个程序都结束了父程序在控制台打印输出。exit(0)的作用是退出子程序。④修改上面的程序,增加语句signal(SIGINT,SIG_IGN)和语句signal(SIGQUIT,SIG_IGN),再观察程序执行时屏幕上出现的现象,并分析其原因。⑤示例程序#include#include#includevoidIntDelete();voidInt1();voidInt2();intpid1,pid2;intEndFlag=0;voidmain(){intexitcode;signal(SIGINT,SIG_IGN);signal(SIGQUIT,SIG_IGN);while((pid1=fork())==-1);if(pid1==0){signal(SIGUSR1,Int1);signal(SIGINT,SIG_IGN);pause();}else{while((pid2=fork())==-1);if(pid2==0){signal(SIGUSR2,Int2);signal(SIGINT,SIG_IGN);pause();}else{signal(SIGINT,IntDelete);waitpid(-1,&exitcode,0);printf(parentprocessiskilled\n);}}}voidIntDelete(){kill(pid1,10);kill(pid2,12);EndFlag=1;}voidInt1(){printf(childprocess1iskilledbyparent!\n);exit(0);}voidInt2(){printf(childprocess2iskilledbyparent!\n);exit(0);}⑥程序分析1.首先在主进程中创建一个子进程1,并将自定义中断信号挂起并监听中断信1上去,子进程Int1()注册到函数SIGUSR1.号,当接收到中断信号子进程1会打印一句话并退出;2.父进程还会创建一个子进程2,并将自定义中断信号SIGUSR2注册到函数Int2()上去,子进程2挂起并监听中断信号,当接收到中断信号子进程2会打印一句话并退出;3.父进程将中断信号SIGINT上注册到了IntDelete函数上,当父进程接收到中断后,会向两个子进程发送软中断信号,子进程接收到软中断信号后会执行响应的响应;以下是截图:4.实验问题从执行结果上来看,按照程序执行的顺序是父进程先接收到中断信号那么为什么父进程反而最后打印输出?这是因为pid_twaitpid(pid_tpid,int*status,intoptions);pid=-1等待任何子进程,相当于wait()。5.实验总结通过本次试验学习了解到进程如何接受中断信号,以及发出软中断信号,以及进程间的等待问题。.

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?