实验三 Linux进程间通信.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验进程分析进程争用临界资源的现象学习解决进程互斥的方法进程的软中断实验内容进程的控制 修改已编制的程序将每个进程输出一个字符修改为每个进程输出一句话再观察程序执行时屏幕上出现的现象并分析出现问题的原因进一步理解各个进程争夺临界资源的情况如果在程序中使用系统调用locking( )来给每一个进程加锁可以实现进程之间的互斥试观察并分析出现的现象进程的软中断通讯 编制一段程序实现进程的软中断通讯使用系统调用fork( )创建两个子进程再使用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按Del键)在捕捉到中断信号后父进程用系统调用kill( )向两个子进程发信号子进程捕捉到信号后分别输出下列信息后终止hild process1 is killed by parent! Child process2 is killed by parent! 父进程等待两个子进程都终止以后输出如下信息后终止arent process in killed! 进程的管道通讯 编制一段程序实现进程的管道通讯使用系统调用pipe( )建立一条管道线两个子进程分别循环向这条管道写一句话hild 1 is sending a message! Child 2 is sending a message! 而父进程则循环从管道中读出信息显示在屏幕上实验提示 用4个基本系统调用实现进程的创建执行和自我终止fork() 创建一个子进程用它创建的子进程是fork调用者进程(即父进程)的复制品即进程映象除了进程标识数以及与进程特性有关的一些参数外其它与父进程相同与父进程共享文本段和打开的文件并都受进程调度程序的调度如果创建进程失败,则fork()返回值为-1若创建进程成功,则从父进程返回值是子进程号,从子进程返回的值是0m=fork()。 ② wait() 父进程处于阻塞(或等待)状态,等待子进程执行完成终止后继续工作其返回值为等待子进程的子进程号n=wait()。 ③ exit() 子进程自我终止,释放所占资源,通知父进程可以删除自己此时它的状态变成P_state=SZOMBgetpid() 获得进程的标识数(进程号),一般是正整数P=getpid()。 编程示例: 编写一个程序,父进程生成一个子进程,父进程等待子进程wait(),子进程执行完成后自我终止exit(),并唤醒父进程父子进程执行时打印有关信息main() { int i,j,k; if (i=fork()) // 非零值 { j=wait(); printf(Parent process!\n); printf(“i=%d =%d\n”, i, j); } else{ k=getpid(); printf(Child process!\n); printf(“i=%d k=%d\n”, i, k); } } 进程的软中断通信 它可用于同一用户的进程之间通信其方式是一个进程通过系统调用kill(pid,sig) 向同一用户的其它进程pid发送一个软中断信号另一进程通过系统调用signal(sig,func)捕捉到信号sig后,执行先约定的动作func,从而实现这两个进程间的通信发送信号kill(pid,sig),本进程将指定信号sig发送给指定进程pid,其中参数为pid进程号,pid与sig均为整数值. 接收信号signal(sig,func),本进程接收到其它进程发送给它的信号后,完成指定的功能func. func一般是函数.例. 编写一个程序,父进程生成子进程,父进程发送信号并等待,子进程接收信号并完成某种功能,然后自我终止并唤醒父进程.int func(); main() { int i,j: signal(17,func); if(i=fork()) { printf(Parent: Signal 17 will be send to Child! \n); kill(i,17); wait(0); printf(Parent: finished! \n); } else{ sleep(10); printf(Child: A signal from my Parent is received! \n) ; exit(); } } func() {printf(It is signal 17 processing function! \n); 执行结果如下: Parent: Signal 17 will be send to Child! It is signal 17 processing function! Child: A signal from my Parent is received! Parent

文档评论(0)

seym + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档