《贵州大学计算机科学与技术学院实验报告Linux系统实验名称进程通信.docx》由会员分享,可在线阅读,更多相关《贵州大学计算机科学与技术学院实验报告Linux系统实验名称进程通信.docx(4页珍藏版)》请在课桌文档上搜索。
1、贵州大学计算机科学与技术学院实验报告院(系)名称计算机科学与技术学院班级人工智能2001课程名称Linux系统实验名称进程通信日期2022年11月14日星期四指导教师王以松学号、姓名沈军豪成绩(10分制):批改日期:1.实验名称进程通信2.实验目的熟悉LimIX进程之间信号、管道、消息队列(信号量、共享内存)等通信的实现方法。编译、运行程序并分析结果rootiZ2ze3k5k6130t7ge5yaiaZ#visig-l.croot0iZ2ze3k5k613t7ge5yaiaZgccsig-l.c-osig-1rootiZ2ze3k5k6130t7ge5yaiaZ#./sig-1人CChiIdp
2、rocess2iskilledbyparent!childprocess1iskilledbyparent!parentprocessiskilled!rootiZ2ze3k5k6130t7ge5yaiaZ#如果把参考程序SignaI(SIGINT,stop)放在*(1)*/和/*/位置,结果会怎样并分析原因。root0iZ2ze3k5k613t7ge5yaiaZ#gccsig-l.c-osig-2root0iZ2ze3k5k6130t7ge5yaiaZ#./sig-2Cchildprocess2iskilledbyparent!parentprocessiskilled!root0iZ2ze
3、3k5k6130t7ge5yaiaZ该程序段前面部分用了两个Wait(O),为什么?因为有两个子进程(4)该程序段中每个进程退出时都用了语句exit(0),为什么?为了使子进程正常退出,并不影响父进程的执行root0iZ2ze3k5k6130t7ge5yaiaZ#./createfifoUsage:./createfiforoot(3iZ2ze3k5k613t7ge5yaiaZ#./createfifotmpf1root(3iZ2ze3k5k613t7ge5yaiaZ#ll/tmp-bash:ll/tmp:Nosuchfileordirectoryroot(3iZ2ze3k5k6130t7ge
4、5yaiaZ#Iltmptotal8-rw1rootroot0Nov1513:22AliyUnASSiStClientSingIprw-r-r1rootroot0Nov2006:55fldrwx3rootroot4096Nov1513:27systemd-private-14c3dbl543e3f88a-chronyd.service-ER9Kfhdrwx2rootroot4096Nov1513:35tmp.NocWjxt2r2root(3iZ2ze3k5k613t7ge5yaiaZ#root(0iZ2ze3k5k6130t7ge5yaiaZ#./read_fifotmpf1openfifo.
5、/read_fifoforreadingsuccessed.read19bytesfromfifo:hello,goodmorningread15bytesfromfifo:hoedoyoudo?rootiZ2ze3k5k6130t7ge5yaiaZ#.writefifotmpf1hello,goodmorningopenfifo./write_fifoforwrittingsuccessed.hoedoyoudo?#在读管道端按下ctrl+C,写端仍然处于打开状态,写端继续输入任何字符,则会收到SIGPIPE信号,表示管道已断开:root0iZ2ze3k5k613Ot7ge5yaiaZ#./
6、write_fifotmpf1openfifo./write_fifoforwrittingsuccessed.hjxhfdcjCaughtsignal13write()failedonfifo:Brokenpiperoot0iZ2ze3k5k613t7ge5yaiaZ#root0iZ2ze3k5k613t7ge5yaiaZ#echohellotmpf2rootiZ2ze3k5k613t7ge5yaiaZ#root(piZ2ze3k5k613t7ge5yaiaZ#cattmpf2hellorootiZ2ze3k5k6130t7ge5yai.aZ#cattmpf2#将写端程序的signal(SI
7、GPIPE,signal_handler)替换为SignaI(SIGPIPE,SIGJGN),并将FlXME后的break语句注释,重新编译运行,在读管道端关闭后,写管道端继续写,重新打开读管道端,发现会丢失在管道断开期间写管道端写入的内容。root0iZ2ze3k5k6130t7ge5yaiaZ#./write_fifotmpf2helloopenfifo.writefifoforwrittingsuccessed.rootiZ2ze3k5k6130t7ge5yaiaZ#./read_fifotmpf2openfifo./read_fifoforreadingsuccessed.read6b
8、ytesfromfifo:helloCroot(3iZ2ze3k5k6130t7ge5yaiaZ#./read_fifotmpf2openfifo./read_fifoforreadingsuccessed.基于共享内存的进程通信root0Z2ze3k5k613Ot7ge5yaiaZ#./shmwritepleaseinput:hellopleaseinput:howareyouCroot(3iZ2ze3k5k613t7ge5yaiaZ#./shmreadmessagefromshm:howareyourootiZ2ze3k5k613t7ge5yaiaZ#ipcs-mnattchSharedMemorySegmentskeyshmidownerpermsbytesOx61lO001root6661028rcc+Ai7l7qrRLA1RG7cRa$a7liIttttt开多个终端,同时运行上面的Shmead和Shmwrite,根据输出结果分析原因只有一个write和read有可以正常运行因为只要有一个进程申请写共享空间,其他写进程就会进入等待状态,只有第一个写进程结束,后面的一个写进程才能运行