实验三 Lnux进程间通信.doc

实验三 Lnux进程间通信.doc

ID:55514522

大小:26.00 KB

页数:5页

时间:2020-05-15

实验三 Lnux进程间通信.doc_第1页
实验三 Lnux进程间通信.doc_第2页
实验三 Lnux进程间通信.doc_第3页
实验三 Lnux进程间通信.doc_第4页
实验三 Lnux进程间通信.doc_第5页
资源描述:

《实验三 Lnux进程间通信.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验三Linux进程间通信1.实验目的(1)分析进程争用临界资源的现象,学习解决进程互斥的方法;(2)学习如何利用进程的“软中断”、管道机制进行进程间的通信,并加深对上述通信机制的理解;(3)了解系统调用pipe()、msgget()、msgsnd()、msgrcv()、msgctl()、shmget()、shmat()、shmdt()、shmctl()的功能和实现过程,利用共享存储区机制进行进程间通信。2.实验内容(1)进程的控制修改已编制的程序,将每个进程输出一个字符修改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析出现问题的原因,

2、进一步理解各个进程争夺临界资源的情况。如果在程序中使用系统调用locking()来给每一个进程加锁,可以实现进程之间的互斥,试观察并分析出现的现象。(2)进程的软中断通讯编制一段程序,实现进程的软中断通讯:使用系统调用fork()创建两个子进程;再使用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键);在捕捉到中断信号后,父进程用系统调用kill()向两个子进程发信号;子进程捕捉到信号后分别输出下列信息后终止:Childprocess1iskilledbyparent!Childprocess2iskilledbyparent!父进

3、程等待两个子进程都终止以后,输出如下信息后终止:Parentprocessinkilled!(3)进程的管道通讯编制一段程序,实现进程的管道通讯:使用系统调用pipe()建立一条管道线;两个子进程分别循环向这条管道写一句话:Child1issendingamessage!Child2issendingamessage!而父进程则循环从管道中读出信息,显示在屏幕上。3.实验提示(1)用4个基本系统调用实现进程的创建,执行和自我终止:①fork()创建一个子进程。用它创建的子进程是fork调用者进程(即父进程)的复制品,即进程映象。除了进程标识数以及与进程

4、特性有关的一些参数外,其它与父进程相同,与父进程共享文本段和打开的文件,并都受进程调度程序的调度。如果创建进程失败,则fork()返回值为-1;若创建进程成功,则从父进程返回值是子进程号,从子进程返回的值是0。m=fork()。②wait()父进程处于阻塞(或等待)状态,等待子进程执行完成终止后继续工作。其返回值为等待子进程的子进程号。n=wait()。③exit()子进程自我终止,释放所占资源,通知父进程可以删除自己。此时它的状态变成P_state=SZOMB。④getpid()获得进程的标识数(进程号),一般是正整数。P=getpid()。编程示例

5、:例1:编写一个程序,父进程生成一个子进程,父进程等待子进程wait(),子进程执行完成后自我终止exit(),并唤醒父进程。父、子进程执行时打印有关信息。main(){inti,j,k;if(i=fork())//非零值{j=wait();printf("Parentprocess!");printf(“i=%dj=%d”,i,j);}else{k=getpid();printf("Childprocess!");printf(“i=%dk=%d”,i,k);}}(2)进程的“软中断”通信它可用于同一用户的进程之间通信。其方式是:一个

6、进程通过系统调用kill(pid,sig)向同一用户的其它进程pid发送一个软中断信号;另一进程通过系统调用signal(sig,func)捕捉到信号sig后,执行预先约定的动作func,从而实现这两个进程间的通信。①发送信号kill(pid,sig),本进程将指定信号sig发送给指定进程pid,其中参数为pid进程号,pid与sig均为整数值.②接收信号signal(sig,func),本进程接收到其它进程发送给它的信号后,完成指定的功能func.func一般是函数.例2.编写一个程序,父进程生成子进程,父进程发送信号并等待,子进程接收信号并完成某种

7、功能,然后自我终止并唤醒父进程.intfunc();main(){inti,j:signal(17,func);if(i=fork()){printf("Parent:Signal17willbesendtoChild!");kill(i,17);wait(0);printf("Parent:finished!");}else{sleep(10);printf("Child:AsignalfrommyParentisreceived!");exit();}}func(){printf("Itissignal17processingfunct

8、ion!");执行结果如下:Parent:Signal17willbesendtoChil

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。