资源描述:
《实验三 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