- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 进程间通信-管道和信号
1
2
进程间通信-PIPE
进程间通信―FIFO
3
信号中断处理
2017-4-11
2
管道示例
2017-4-11
3
创建无名管道
2017-4-11
4
文件描述符重定向
(1)cattest01
(2)cattest02test01
(3)cattest02 2error test01
(4)cattest02 12 test01
(5)cat 12 1test02test01
2017-4-11
5
dup() / dup2()
2017-4-11
6
复制文件描述符
2017-4-11
7
实现who|sort
即使用无名管道将执行who命令的进程与执行sort命令的进程联系在一起,将当前系统用户信息按排序方法输出。
过程及示例代码见教材。
2017-4-11
8
流重定向
第8章 进程间通信-管道和信号
1
2
进程间通信-PIPE
进程间通信―FIFO
3
信号中断处理
2017-4-11
10
FIFO应用示例
2017-4-11
11
管道示例
2017-4-11
12
创建FIFO
2017-4-11
13
应用示例
亲缘关系进程使用有名管道通信应用实例
见教材。
非亲缘关系进程使用有名管道通信应用实例
见教材。
2017-4-11
14
管道基本特点总结
两类型管道具有以下特点:
(1)管道是特殊类型的文件,在满足先入先出的原则条件下可能进行读写,但不能定位读写位置。
(2)管道是单向的,要实现双向,需要两个管道。无名管道只能实现亲缘关系进程间通信(即无名管道的两个文件描述符可以被两者都访问到),而有名管道以磁盘文件的方式存在,可以实现本机任意两进程间通信。
(3)无名管道阻塞问题。无名管道无须显式打开,创建时直接返回文件描述符,而在读写时需要确实对方的存在,否则将退出。即如果当前进程向无名管道的写数据时,必须确定其别一端为某个进程(这个进程可以是当前进程)拥有,即有一个(或多个)进程的文件描述符表中至少有一个成员指向管道的另一端(显然,能够读写管道当前端,则本端在当前进程中是可以访问的)。如果写入无名管道的数据超过其最大值,写操作将阻塞,如果管道中没有数据,读操作将阻塞,如果管道发现另一端断开(另一端文件描述符关闭),将自动退出。
(4)有名管道阻塞问题。有名管道在打开时需要确实对方的存在,否则将阻塞。即以读方式打开某管道,该操作得以继续执行的条件是:在此之前,已经有一个进程以写的方式打开此管道,否则阻塞,直到条件满足,因此有名管道将阻塞在打开位置。也可以以读写(O_RDWR)方式打开有名管道,进程能够继续执行(不阻塞),只是这样操作没有什么意思,即当前进程读,当前进程写。
第8章 进程间通信-管道和信号
1
2
进程间通信-PIPE
进程间通信―FIFO
3
信号中断处理
2017-4-11
16
Linux常见信号与处理
2017-4-11
17
信号的处理流程
(1)信号被某个进程产生,并设置此信号传递的对象(一般为对应进程的pid),然后传递给操作系统;
(2)操作系统根据接收进程的设置(是否阻塞)而选择性的发送给接收者,如果接收者阻塞该信号(且该信号是可以阻塞的),操作系统将暂时保留该信号,而不传递,直到该进程解除对此信号的阻塞(如果对应进程已经退出,则丢弃此信号);如果对应进程没有阻塞,操作系统将传递此信号;
(3)目的进程接收到此信号后,将根据当前进程对此信号设置的预处理方式,暂时终止当前代码的执行,保护上下文(主要包括临时寄存器数据、当前程序位置以及当前CPU的状态)、转而执行中断服务程序,执行完成后再恢复到被中断的位置。当然,对于可抢占式内核,在中断返回时还将引发新的调度。
2017-4-11
18
可能的信号来源
2017-4-11
19
kill产生一个信号
2017-4-11
20
raise自举一个信号
2017-4-11
21
alarm()定时
2017-4-11
22
ualarm定时
2017-4-11
23
信号处理与signal安装信号
信号处理办法
(1)忽略此信号。大多数信号都可使用这种方式进行处理,但有两种信号不能被忽略,SIGKILL和SIGSTOP。这两种信号不能被忽略的原因是:它们向超级用户提供一种使进程终止或停止的可靠方法。
(2)捕捉信号。通知内核在某种信号发生时调用一个用户函数。在用户函数中,可执行用户希望对这种事件进行的处理,这需要安装此信号。例如捕捉到SIGCHLD信号,则表示子进程已经终止,所以此信号的捕捉函数可以调用waitpid()以取得该子进程的进程PID以及它的终止状态和资源。
(3)执行系统默认操作。Linux系统对任何
您可能关注的文档
- 《Linux编程及应用-任继平》00第00章 Linux高级程序设计.ppt
- 《Linux编程及应用-任继平》07第07章 Linux进程管理与程序开发.ppt
- 《Linux编程及应用-任继平》09第09章 System V进程间通信.ppt
- 《Linux编程及应用-任继平》10第10章 Linux多线程编程.ppt
- 《Linux编程及应用-任继平》03第03章 Linux进程存储管理.ppt
- 《Linux编程及应用-任继平》11第11章 线程间同步机制.ppt
- 《Linux编程及应用-任继平》12第12章 Linux socket网络编程基础.ppt
- 《Linux编程及应用-任继平》unix操作系统教案课时-正式版.doc
- 《Linux编程及应用-任继平》unix操作系统讲稿全部.doc
- 《Linux编程及应用-任继平》补充shell编程.ppt
文档评论(0)