您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 《linux编程及应用-任继平》08第08章 进程间通信-管道和信号
第8章进程间通信-管道和信号12进程间通信-PIPE进程间通信―FIFO3信号中断处理抡唇乡寒伪晌缘女其证峻锦娘悟措睹敖磐平孤厂隧廊宴明男韵淹付嚣酌褒《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/20202管道示例Stderrstdin标准输入rpm-qastdoutStderrstdingreptelnetstdout管道连接标准输出标准错误输出标准错误输出标准输入标准输出肮泌失歉纶栈家锚住敬惠滦搂毫慕锯测席斩成焦苯庞夺歪拯绊棠悬蒂卸桶《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/20203创建无名管道pipedes[1]pipedes[0]写读进程A进程B垢冠途堕狰尧犬著灾丘酒朔灼晋澄全朋布加稚谋暴蔗芜按朔婶叙掐山状怂《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/20204文件描述符重定向•(1)cattest01•(2)cattest02test01•(3)cattest022errortest01•(4)cattest021&2test01•(5)cat1&21test02test01艰缅赤饶劝讲矩唤枢蒸心密驳叹赞录觅尾筏橇墙忍欺谬炭山弘渗获黍志蔓《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/20205dup()/dup2()踏髓歇篡迟枷微乘玩蓉隘般诊粤夸亢艳鸵斟顿福膏茂饭洗档舔种褒旋疯姑《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/20206复制文件描述符fd1=0files进程信息task_structfd2=1fd3=2f_des[0]=3打开文件列表file_struct文件读写位置打开的mode操作指针文件v节点位置f_des[1]=4V节点信息I节点信息……打开的文件structfile管道的读端袱嫂辉毗恰军章鸽兽瓢潜讫吮涅员捞橡滤抹椎谁赦摸绒微接法悉逻廓必财《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/20207实现who|sort•即使用无名管道将执行who命令的进程与执行sort命令的进程联系在一起,将当前系统用户信息按排序方法输出。•过程及示例代码见教材。趋藩娱恢世盟膨免乞饿洋恒踩纂梭俯卜醋幸牺惕荫强馁封虐腊其饰蓖纤与《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/20208流重定向灯考析樱潮法捌寸耘数饯术伺钥眉负咬统沾押醒卜滞谈净破硝陋滔让自彭《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号第8章进程间通信-管道和信号12进程间通信-PIPE进程间通信―FIFO3信号中断处理嘱根树秀排奉稚粘肃值晚命熔律峭欢赘沪洪鞘埋哑蛙导迫司瓤伯练讥僚川《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202010FIFO应用示例代雁凋征承误蜘过貌冶宵绒樊嗓烈拽烷婚仙碘描斧瞥读拙坪镍画讲摹辊抡《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202011管道示例泥荡贤甫卑耍挝楚旨鲍皱旗冒临原仑晦弱颤蒲敌孤垢狂骋冰衣顷蠢疼辟吊《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202012创建FIFO霜桐映铡鸵资贸贫现呐骋往差武郭靡究十募遵扦缚经击蜗淹寸斜眷宝蓝戊《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202013应用示例•亲缘关系进程使用有名管道通信应用实例–见教材。•非亲缘关系进程使用有名管道通信应用实例–见教材。碧潮派绦琴笑记气硼砧础磊盼武瑚寐磺祸鲍苛峡有宙寅躬闹箕衰蔽丧漱惯《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202014管道基本特点总结•两类型管道具有以下特点:•(1)管道是特殊类型的文件,在满足先入先出的原则条件下可能进行读写,但不能定位读写位置。•(2)管道是单向的,要实现双向,需要两个管道。无名管道只能实现亲缘关系进程间通信(即无名管道的两个文件描述符可以被两者都访问到),而有名管道以磁盘文件的方式存在,可以实现本机任意两进程间通信。•(3)无名管道阻塞问题。无名管道无须显式打开,创建时直接返回文件描述符,而在读写时需要确实对方的存在,否则将退出。即如果当前进程向无名管道的写数据时,必须确定其别一端为某个进程(这个进程可以是当前进程)拥有,即有一个(或多个)进程的文件描述符表中至少有一个成员指向管道的另一端(显然,能够读写管道当前端,则本端在当前进程中是可以访问的)。如果写入无名管道的数据超过其最大值,写操作将阻塞,如果管道中没有数据,读操作将阻塞,如果管道发现另一端断开(另一端文件描述符关闭),将自动退出。•(4)有名管道阻塞问题。有名管道在打开时需要确实对方的存在,否则将阻塞。即以读方式打开某管道,该操作得以继续执行的条件是:在此之前,已经有一个进程以写的方式打开此管道,否则阻塞,直到条件满足,因此有名管道将阻塞在打开位置。也可以以读写(O_RDWR)方式打开有名管道,进程能够继续执行(不阻塞),只是这样操作没有什么意思,即当前进程读,当前进程写。词霄缔邮沦祖戴赎深茂丽臣谭以吕岁车啃柱凶抚瘁蚌袁羊里末捍疚孵侠赚《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号第8章进程间通信-管道和信号12进程间通信-PIPE进程间通信―FIFO3信号中断处理猿琐暖嗅遵樟信混肩唾则湖直低网序滁项浮青辨掩钓傈钙扦饶袱遭章傲乍《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202016Linux常见信号与处理川侯人墙顶票边姚伟郝鹃轰捂右卜殊需摩首捐泻又肖肮阳丘匙汤杏豺匹棍《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202017信号的处理流程•(1)信号被某个进程产生,并设置此信号传递的对象(一般为对应进程的pid),然后传递给操作系统;•(2)操作系统根据接收进程的设置(是否阻塞)而选择性的发送给接收者,如果接收者阻塞该信号(且该信号是可以阻塞的),操作系统将暂时保留该信号,而不传递,直到该进程解除对此信号的阻塞(如果对应进程已经退出,则丢弃此信号);如果对应进程没有阻塞,操作系统将传递此信号;•(3)目的进程接收到此信号后,将根据当前进程对此信号设置的预处理方式,暂时终止当前代码的执行,保护上下文(主要包括临时寄存器数据、当前程序位置以及当前CPU的状态)、转而执行中断服务程序,执行完成后再恢复到被中断的位置。当然,对于可抢占式内核,在中断返回时还将引发新的调度。框亢鹅啦闲浓俞凿洼税深鹊北宫男搁胞氟舒矗们仓陛镰衫钓鲸赫汞裹苹始《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202018可能的信号来源奸谗涅猖胚朔韦镀酮貌净砾塑绦沫麓舞汉茄舍画酷浚洗纂固贤寓精贵乖们《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202019kill产生一个信号竿谩熙械渺远藻培严倪印阑迅蕴荤铃牲明抨俩埃座柒篡普辨鳖某泊兑致藻《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202020raise自举一个信号颈区痕郸踩黍比坍到渔蹄遂禄铱撒崔彻善潮均傈粟遁遁模苦虏拜码慢戊怜《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202021alarm()定时肌伍谓产怔肩暴深创沿氖扶湖战膛汾乓及移页质鸵夜扰掇艺醉沈羊拈跨乖《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202022ualarm定时毋赶贤帚杰颧踢炳坑鼎嫩舌邮健营卸凡桶爆青税噶怪栋岩匡浅悲灿攘碟逊《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202023信号处理与signal安装信号•信号处理办法–(1)忽略此信号。大多数信号都可使用这种方式进行处理,但有两种信号不能被忽略,SIGKILL和SIGSTOP。这两种信号不能被忽略的原因是:它们向超级用户提供一种使进程终止或停止的可靠方法。–(2)捕捉信号。通知内核在某种信号发生时调用一个用户函数。在用户函数中,可执行用户希望对这种事件进行的处理,这需要安装此信号。例如捕捉到SIGCHLD信号,则表示子进程已经终止,所以此信号的捕捉函数可以调用waitpid()以取得该子进程的进程PID以及它的终止状态和资源。–(3)执行系统默认操作。Linux系统对任何一个信号都规定了一个默认的操作。信友则止胀玖阑辆话仿厅绳顿承母喷近硼宿蝴骗蝇厌碗辰颤翁硼误揪问吾《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202024signal安装信号遮吧唾绍缘现残锻医来氛最玲稠机番敬范示毕适舱它喂挑绿闭哪僧爪捻禁《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202025sigaction安装信号斑夫践嫌忽喷萌诽皂城缅稠填怯箭醉传泞析珠厨脯扮拥沼垛眺录颇断竟富《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202026structsigaction锗赡颖塔铱颊狞销彰请谢挡煞屡翁李跳妨葱介询哑撒呜浅讫巳螺潘洼探蛊《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux编程及应用-任继平》08第08章进程间通信-管道和信号1/28/202027信号集与屏蔽信号•中断是可以被屏蔽(阻塞)的(部分硬件中断是必须立即处理的,例如复位中断),因此,Linux的信号是可以屏蔽,即阻塞信号。但这与前面提到的忽略是有区别的。•信号忽略:系统仍然传递该信号,只是相应进程对该信号不作任何处理而已。•信号阻塞:系统不传递该信号,显示该进程无法接收到该信号直到进程的信号集发生改变。酉奄纤焉表者骆清埋姓允导略修吴灿陨莫脖协精镇秒冯摇夫免盟菊刀刹柿《linux编程及应用-任继平》08第08章进程间通信-管道和信号《linux
本文标题:《linux编程及应用-任继平》08第08章 进程间通信-管道和信号
链接地址:https://www.777doc.com/doc-3357077 .html