![操作系統(tǒng)實(shí)驗(yàn)_實(shí)驗(yàn)1_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-6/2/092733ad-f22c-4ec2-93f1-d636921d34f8/092733ad-f22c-4ec2-93f1-d636921d34f81.gif)
![操作系統(tǒng)實(shí)驗(yàn)_實(shí)驗(yàn)1_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-6/2/092733ad-f22c-4ec2-93f1-d636921d34f8/092733ad-f22c-4ec2-93f1-d636921d34f82.gif)
![操作系統(tǒng)實(shí)驗(yàn)_實(shí)驗(yàn)1_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-6/2/092733ad-f22c-4ec2-93f1-d636921d34f8/092733ad-f22c-4ec2-93f1-d636921d34f83.gif)
![操作系統(tǒng)實(shí)驗(yàn)_實(shí)驗(yàn)1_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-6/2/092733ad-f22c-4ec2-93f1-d636921d34f8/092733ad-f22c-4ec2-93f1-d636921d34f84.gif)
![操作系統(tǒng)實(shí)驗(yàn)_實(shí)驗(yàn)1_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-6/2/092733ad-f22c-4ec2-93f1-d636921d34f8/092733ad-f22c-4ec2-93f1-d636921d34f85.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、廣州大學(xué)學(xué)生實(shí)驗(yàn)報(bào)告開(kāi)課學(xué)院及實(shí)驗(yàn)室:計(jì)算機(jī)科學(xué)與工程實(shí)驗(yàn)室 2015年11月10日實(shí)驗(yàn)課程名稱操作系統(tǒng)實(shí)驗(yàn)成績(jī)實(shí)驗(yàn)項(xiàng)目名稱進(jìn)程管理與進(jìn)程通信指導(dǎo)老師(*報(bào)告只能為文字和圖片,老師評(píng)語(yǔ)將添加到此處,學(xué)生請(qǐng)勿作答*)1、 實(shí)驗(yàn)?zāi)康?.1、掌握進(jìn)程的概念,明確進(jìn)程的含義1.2、認(rèn)識(shí)并了解并發(fā)執(zhí)行的實(shí)質(zhì)2.1、掌握進(jìn)程另外的創(chuàng)建方法2.2、熟悉進(jìn)程的睡眠、同步、撤消等進(jìn)程控制方法3.1、進(jìn)一步認(rèn)識(shí)并發(fā)執(zhí)行的實(shí)質(zhì)3.2、分析進(jìn)程競(jìng)爭(zhēng)資源的現(xiàn)象,學(xué)習(xí)解決進(jìn)程互斥的方法4.1、了解守護(hù)進(jìn)程5.1、了解什么是信號(hào)5.2、INUX系統(tǒng)中進(jìn)程之間軟中斷通信的基本原理6.1、了解什么是管道6.2、熟悉UNIX/L
2、INUX支持的管道通信方式7.1、了解什么是消息7.2、熟悉消息傳送的機(jī)理8.1、了解和熟悉共享存儲(chǔ)機(jī)制二、實(shí)驗(yàn)內(nèi)容1.1、編寫(xiě)一段程序,使用系統(tǒng)調(diào)用fork( )創(chuàng)建兩個(gè)子進(jìn)程。當(dāng)此程序運(yùn)行時(shí),在系統(tǒng)中有一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程活動(dòng)。讓每一個(gè)進(jìn)程在屏幕上顯示一個(gè)字符:父進(jìn)程顯示'a',子進(jìn)程分別顯示字符'b'和字符'c'。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。1.2、修改上述程序,每一個(gè)進(jìn)程循環(huán)顯示一句話。子進(jìn)程顯示'daughter '及'son ',父進(jìn)程顯示 'parent ',觀察結(jié)果,分
3、析原因。2.1、用fork( )創(chuàng)建一個(gè)進(jìn)程,再調(diào)用exec( )用新的程序替換該子進(jìn)程的內(nèi)容2.2、利用wait( )來(lái)控制進(jìn)程執(zhí)行順序3.1、修改實(shí)驗(yàn)(一)中的程序2,用lockf( )來(lái)給每一個(gè)進(jìn)程加鎖,以實(shí)現(xiàn)進(jìn)程之間的互斥3.2、觀察并分析出現(xiàn)的現(xiàn)象4.1、寫(xiě)一個(gè)使用守護(hù)進(jìn)程(daemon)的程序,來(lái)實(shí)現(xiàn): 創(chuàng)建一個(gè)日志文件/var/log/Mydaemon.log ;每分鐘都向其中寫(xiě)入一個(gè)時(shí)間戳(使用time_t的格式) ;5.1、用fork( )創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal( )讓父進(jìn)程捕捉鍵盤(pán)上來(lái)的中斷信號(hào)(即按c鍵);捕捉到中斷信號(hào)后,父進(jìn)程用系統(tǒng)調(diào)用kill( )
4、向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕捉到信號(hào)后分別輸出下列信息后終止:Child process1 is killed by parent!Child process2 is killed by parent!父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出如下的信息后終止:Parent process is killed!5.2、用軟中斷通信實(shí)現(xiàn)進(jìn)程同步的機(jī)理6.1、編寫(xiě)程序?qū)崿F(xiàn)進(jìn)程的管道通信。用系統(tǒng)調(diào)用pipe( )建立一管道,二個(gè)子進(jìn)程P1和P2分別向管道各寫(xiě)一句話: Child 1 is sending a message! Child 2 is sending a message!父進(jìn)程從管道中讀出二個(gè)來(lái)
5、自子進(jìn)程的信息并顯示(要求先接收P1,后P2)。7.1、消息的創(chuàng)建、發(fā)送和接收。使用系統(tǒng)調(diào)用msgget( ),msgsnd( ),msgrev( ),及msgctl( )編制一長(zhǎng)度為k的消息發(fā)送和接收的程序。8.1、 編制一長(zhǎng)度為1k的共享存儲(chǔ)區(qū)發(fā)送和接收的程序。三、實(shí)驗(yàn)原理1、 程既是一個(gè)獨(dú)立擁有資源的基本單位,又是一個(gè)獨(dú)立調(diào)度的基本單位。一個(gè)進(jìn)程實(shí)體由若干個(gè)區(qū)(段)組成,包括程序區(qū)、數(shù)據(jù)區(qū)、棧區(qū)、共享存儲(chǔ)區(qū)等。每個(gè)區(qū)又分為若干頁(yè),每個(gè)進(jìn)程配置有唯一的進(jìn)程控制塊PCB,用于控制和管理進(jìn)程。2、 進(jìn)程是進(jìn)程映像的執(zhí)行過(guò)程,也就是正在執(zhí)行的進(jìn)程實(shí)體。3、 fork( )返回值意義如下:0:在子
6、進(jìn)程中,pid變量保存的fork( )返回值為0,表示當(dāng)前進(jìn)程是子進(jìn)程。>0:在父進(jìn)程中,pid變量保存的fork( )返回值為子進(jìn)程的id值(進(jìn)程唯一標(biāo)識(shí)符)。4、NIX/LINUX中fork( )是一個(gè)非常有用的系統(tǒng)調(diào)用,但在UNIX/LINUX中建立進(jìn)程除了fork( )之外,也可用與fork( ) 配合使用的exec( )。5、lockf(files,function,size)用作鎖定文件的某些段或者整個(gè)文件。6、每個(gè)信號(hào)都對(duì)應(yīng)一個(gè)正整數(shù)常量(稱為signal number,即信號(hào)編號(hào)。定義在系統(tǒng)頭文件<signal.h>中),代表同一用戶的諸進(jìn)程之間傳送事先約定的
7、信息的類型,用于通知某進(jìn)程發(fā)生了某異常事件。每個(gè)進(jìn)程在運(yùn)行時(shí),都要通過(guò)信號(hào)機(jī)制來(lái)檢查是否有信號(hào)到達(dá)。若有,便中斷正在執(zhí)行的程序,轉(zhuǎn)向與該信號(hào)相對(duì)應(yīng)的處理程序,以完成對(duì)該事件的處理;處理結(jié)束后再返回到原來(lái)的斷點(diǎn)繼續(xù)執(zhí)行。實(shí)質(zhì)上,信號(hào)機(jī)制是對(duì)中斷機(jī)制的一種模擬,故在早期的UNIX版本中又把它稱為軟中斷。7、信號(hào)的發(fā)送,是指由發(fā)送進(jìn)程把信號(hào)送到指定進(jìn)程的信號(hào)域的某一位上。如果目標(biāo)進(jìn)程正在一個(gè)可被中斷的優(yōu)先級(jí)上睡眠,核心便將它喚醒,發(fā)送進(jìn)程就此結(jié)束。一個(gè)進(jìn)程可能在其信號(hào)域中有多個(gè)位被置位,代表有多種類型的信號(hào)到達(dá),但對(duì)于一類信號(hào),進(jìn)程卻只能記住其中的某一個(gè)。8、當(dāng)一個(gè)進(jìn)程要進(jìn)入或退出一個(gè)低優(yōu)先級(jí)睡眠狀
8、態(tài)時(shí),或一個(gè)進(jìn)程即將從核心態(tài)返回用戶態(tài)時(shí),核心都要檢查該進(jìn)程是否已收到軟中斷。當(dāng)進(jìn)程處于核心態(tài)時(shí),即使收到軟中斷也不予理睬;只有當(dāng)它返回到用戶態(tài)后,才處理軟中斷信號(hào)。9、管道,是指能夠連接一個(gè)寫(xiě)進(jìn)程和一個(gè)讀進(jìn)程的、并允許它們以生產(chǎn)者消費(fèi)者方式進(jìn)行通信的一個(gè)共享文件,又稱為pipe文件。10、消息機(jī)制允許由一個(gè)進(jìn)程給其它任意的進(jìn)程發(fā)送一個(gè)消息。 11、該機(jī)制可使若干進(jìn)程共享主存中的某一個(gè)區(qū)域,且使該區(qū)域出現(xiàn)(映射)在多個(gè) 進(jìn)程的虛地址空間中。 四、實(shí)驗(yàn)設(shè)備Linux系統(tǒng)五、實(shí)驗(yàn)程序1、創(chuàng)建子進(jìn)程相關(guān)代碼#include <stdio.h>#include<unistd.h>
9、;int main( )int p1,p2;while(p1=fork( )=-1); /*創(chuàng)建子進(jìn)程p1*/if (p1=0) putchar('b'); else while(p2=fork( )=-1); /*創(chuàng)建子進(jìn)程p2*/if(p2=0) putchar('c'); else putchar('a'); 修改后:#include<stdio.h>#include<unistd.h>int main( )int p1,p2,i;while(p1=fork( )= -1); /*創(chuàng)建子進(jìn)程p1*/if (p1=0)
10、 for(i=0;i<10;i+)printf("daughter %dn",i);else while(p2=fork( )= -1); /*創(chuàng)建子進(jìn)程p2*/if(p2=0) for(i=0;i<10;i+) printf("son %dn",i);else for(i=0;i<10;i+) printf("parent %dn",i);2、exec,wait相關(guān)代碼 #include<stdio.h>#include<stdlib.h> #include<unistd.h>#
11、include <sys/wait.h>void main( ) int pid; pid=fork( ); /*創(chuàng)建子進(jìn)程*/switch(pid) case -1: /*創(chuàng)建失敗*/ printf("fork fail!n"); exit(1); case 0: /*子進(jìn)程*/ execl("/bin/ls","ls","-1","-color",NULL); printf("exec fail!n"); exit(1); default: /*父進(jìn)程*/ w
12、ait(NULL); /*同步*/ printf("ls completed !n"); exit(0); 3、lockf相關(guān)代碼#include <stdio.h>#include <unistd.h>#include <sys/wait.h>int main( )int p1,p2,i;while(p1=fork( )=-1); /*創(chuàng)建子進(jìn)程p1*/if (p1=0)lockf(1,1,0); /*加鎖,這里第一個(gè)參數(shù)為stdout(標(biāo)準(zhǔn)輸出設(shè)備的描述符)*/for(i=0;i<10;i+)printf("daugh
13、ter %dn",i);lockf(1,0,0); /*解鎖*/elsewhile(p2=fork( )=-1); /*創(chuàng)建子進(jìn)程p2*/if (p2=0)lockf(1,1,0); /*加鎖*/for(i=0;i<10;i+)printf("son %dn",i);lockf(1,0,0); /*解鎖*/elselockf(1,1,0); /*加鎖*/for(i=0;i<10;i+)printf("parent %dn",i);lockf(1,0,0); /*解鎖*/4、守護(hù)神程序:#include <stdio.h>
14、#include <time.h>#include <stdlib.h>#include <unistd.h>#include<sys/time.h>int main()time_t t; FILE *fp; fp=fopen("/var/log/Mydaemon.log","a");pid_t pid; pid=fork();if(pid>0)printf("Daemon on duty!n");exit(0);else if(pid<0)printf("Can&
15、#39;t fork!n");exit(-1);while(1)if(fp>=0)sleep(60); printf("Daemon on duty!n");t=time(0);fprintf(fp,"The current time is %sn",asctime(localtime(&t);fclose(fp);5、通信中斷關(guān)代碼#include <stdio.h>#include <stdlib.h>#include<sys/wait.h>#include <signal.h>
16、#include <unistd.h>void waiting( ),stop( );int wait_mark;int main( )int p1,p2,stdout;while(p1=fork( )=-1); /*創(chuàng)建子進(jìn)程p1*/if(p1>0)while(p2=fork( )=-1); /*創(chuàng)建子進(jìn)程p2*/if(p2>0)wait_mark=1;signal(SIGINT,stop); /*接收到c信號(hào),轉(zhuǎn)stop*/waiting( );kill(p1,16); /*向p1發(fā)軟中斷信號(hào)16*/kill(p2,17); /*向p2發(fā)軟中斷信號(hào)17*/wait(
17、0); /*同步*/wait(0);printf("Parent process is killed!n");exit(0);elsewait_mark=1;signal(17,stop); /*接收到軟中斷信號(hào)17,轉(zhuǎn)stop*/waiting( );lockf(stdout,1,0);printf("Child process 2 is killed by parent!n");lockf(stdout,0,0);exit(0);elsewait_mark=1;signal(16,stop); /*接收到軟中斷信號(hào)16,轉(zhuǎn)stop*/waiting(
18、 );lockf(stdout,1,0);printf("Child process 1 is killed by parent!n");lockf(stdout,0,0);exit(0);void waiting( )while(wait_mark!=0);void stop( )wait_mark=0;6、管道相關(guān)代碼:#include <unistd.h>#include <signal.h>#include <stdio.h>#include<stdlib.h> #include<sys/wait.h> i
19、nt pid1,pid2;int main( ) int fd2;char outpipe100,inpipe100;pipe(fd); /*創(chuàng)建一個(gè)管道*/while (pid1=fork( )=-1);if(pid1=0)lockf(fd1,1,0);sprintf(outpipe,"child 1 process is sending message!"); /*把串放入數(shù)組outpipe中*/write(fd1,outpipe,50); /*向管道寫(xiě)長(zhǎng)為50字節(jié)的串*/sleep(5); /*自我阻塞5秒*/lockf(fd1,0,0);exit(0);elsewh
20、ile(pid2=fork( )=-1);if(pid2=0)lockf(fd1,1,0); /*互斥*/sprintf(outpipe,"child 2 process is sending message!");write(fd1,outpipe,50);sleep(5);lockf(fd1,0,0);exit(0);else wait(0); /*同步*/read(fd0,inpipe,50); /*從管道中讀長(zhǎng)為50字節(jié)的串*/printf("%sn",inpipe);wait(0);read(fd0,inpipe,50);printf(&quo
21、t;%sn",inpipe);exit(0);7、消息的相關(guān)代碼:lient.c#include<sys/types.h>#include<stdio.h>#include<sys/msg.h>#include<sys/ipc.h>#include<stdlib.h> #define MSGKEY 75struct msgform long mtype;char mtext1000;msg;int msgqid;void client()int i;msgqid=msgget(MSGKEY,0777);for(i=10;i&
22、gt;=1;i-)msg.mtype=i;printf("(client)sentn");msgsnd(msgqid,&msg,1024,0); exit(0);int main( ) client( );server.c#include<sys/types.h>#include<sys/msg.h>#include<sys/ipc.h>#include<stdio.h>#include<stdlib.h> #define MSGKEY 75struct msgform long mtype;char mt
23、ext1000;msg;int msgqid;void server( )msgqid=msgget(MSGKEY,0777|IPC_CREAT); /*創(chuàng)建75#消息隊(duì)列*/do msgrcv(msgqid,&msg,1030,0,0); /*接收消息*/printf("(server)receivedn");while(msg.mtype!=1);msgctl(msgqid,IPC_RMID,0); /*刪除消息隊(duì)列,歸還資源*/exit(0);int main( ) server( );8、共享存儲(chǔ)機(jī)制的相關(guān)代碼#include<sys/types.h&
24、gt;#include<sys/shm.h>#include<sys/ipc.h>#include<unistd.h> #include<stdlib.h> #include<stdio.h>#include<sys/wait.h> #include<signal.h> #define SHMKEY 75#define SHMSZ 128int shmid,i;int *addr;void client( ) int i;shmid=shmget(SHMKEY,1024,0777); /*打開(kāi)共享存儲(chǔ)區(qū)*/ad
25、dr=shmat(shmid,0,0); /*獲得共享存儲(chǔ)區(qū)首地址*/for (i=9;i>=0;i-) while (*addr!=-1);printf("(client) sentn");*addr=i;exit(0);void server( )shmid=shmget(SHMKEY,1024,0777|IPC_CREAT); /*創(chuàng)建共享存儲(chǔ)區(qū)*/addr=shmat(shmid,0,0); /*獲取首地址*/do *addr=-1;while (*addr=-1);printf("(server) receivedn");while (*
26、addr);shmctl(shmid,IPC_RMID,0); /*撤消共享存儲(chǔ)區(qū),歸還資源*/exit(0);int main( )while(i=fork( )=-1);if(!i) server( );system("ipcs -m");while(i=fork( )=-1);if(!i) client( );wait(0);wait(0);六、實(shí)驗(yàn)結(jié)果實(shí)驗(yàn)1.1本來(lái)從進(jìn)程并發(fā)執(zhí)行來(lái)看,各種情況都有可能。上面的三個(gè)進(jìn)程沒(méi)有同步措施,父進(jìn)程與子進(jìn)程的輸出內(nèi)容會(huì)疊加在一起。輸出次序帶有隨機(jī)性。實(shí)驗(yàn)1.2由實(shí)驗(yàn)1.1可知各種情況都有可能由于函數(shù),而且printf( )在輸出
27、字符串時(shí)不會(huì)被中斷,因此,字符串內(nèi)部字符順序輸出不變。但由于進(jìn)程并發(fā)執(zhí)行的調(diào)度順序和父子進(jìn)程搶占處理機(jī)問(wèn)題,輸出字符串的順序和先后隨著執(zhí)行的不同而發(fā)生變化。這與打印單字符的結(jié)果相同。實(shí)驗(yàn)2.12.2程序在調(diào)用fork( )建立一個(gè)子進(jìn)程后,馬上調(diào)用wait( ),使父進(jìn)程在子進(jìn)程結(jié)束之前,一直處于睡眠狀態(tài)。子進(jìn)程用exec( )裝入命令ls ,exec( )后,子進(jìn)程的代碼被ls的代碼取代,這時(shí)子進(jìn)程的PC指向ls的第1條語(yǔ)句,開(kāi)始執(zhí)行l(wèi)s的命令代碼。wait( )給我們提供了一種實(shí)現(xiàn)進(jìn)程同步的簡(jiǎn)單方法。實(shí)驗(yàn)3.13.2加鎖和沒(méi)加鎖還是有區(qū)別的。沒(méi)加鎖,子進(jìn)程的for循環(huán)會(huì)被“打斷”,也就是說(shuō)
28、,10個(gè)daughter和10個(gè)son會(huì)互相穿插。而加鎖以后,盡管10個(gè)son和10個(gè)daughter會(huì)或先或后出現(xiàn),但是不會(huì)互相穿插,以10個(gè)10個(gè)這樣的完整形式輸出。這是因?yàn)榧渔i以后,屏幕輸出要等解鎖指令發(fā)出后,才會(huì)讓第二個(gè)進(jìn)程執(zhí)行輸出,在第一個(gè)進(jìn)程沒(méi)有解鎖前,其余進(jìn)程不能輸出。實(shí)驗(yàn)4.1終端:日志:fprintf(fp,"The current time is %sn",asctime(localtime(&t)只是把當(dāng)前時(shí)間輸入到緩沖區(qū),并沒(méi)有寫(xiě)到Mydaemon.log文件里面,所以并不會(huì)輸出時(shí)間。唯有在fprintf最后寫(xiě)上fflush(fp)才能強(qiáng)制輸
29、出時(shí)間戳到Mydaemon.log文件里面。實(shí)驗(yàn)5.15.2屏幕上無(wú)反應(yīng),按下C后,顯示 Parent process is killed!上述程序中,signal( )都放在一段程序的前面部位,而不是在其他接收信號(hào)處。這是因?yàn)閟ignal( )的執(zhí)行只是為進(jìn)程指定信號(hào)值16或17的作用,以及分配相應(yīng)的與stop( )過(guò)程鏈接的指針。因而,signal( )函數(shù)必須在程序前面部分執(zhí)行。實(shí)驗(yàn)6.1延遲5秒后顯示:child 1 process is sending message!再延遲5秒:child 2 process is sending message!實(shí)驗(yàn)7.1應(yīng)當(dāng)是每當(dāng)client發(fā)
30、送一個(gè)消息后,server接收該消息,client再發(fā)送下一條。也就是說(shuō)“(client)sent”和 “(server)received”的字樣應(yīng)該在屏幕上交替出現(xiàn)。實(shí)際的結(jié)果大多是,先由client發(fā)送了兩條消息,然后server接收一條消息。此后client 、server交替發(fā)送和接收消息。最后server一次接收兩條消息。client 和server 分別發(fā)送和接收了10條消息,與預(yù)期設(shè)想一致。實(shí)驗(yàn)8.1在運(yùn)行過(guò)程中,發(fā)現(xiàn)每當(dāng)client發(fā)送一次數(shù)據(jù)后,server要等待大約0.1秒才有響應(yīng)。同樣,之后client又需要等待大約0.1秒才發(fā)送下一個(gè)數(shù)據(jù)。七、問(wèn)題回答分析(1.1)系統(tǒng)
31、是怎樣創(chuàng)建進(jìn)程的?答:系統(tǒng)通過(guò)fork()系統(tǒng)調(diào)用來(lái)創(chuàng)建父進(jìn)程對(duì)應(yīng)的子進(jìn)程,創(chuàng)建成功將返回一個(gè)值“0”給子進(jìn)程,父進(jìn)程會(huì)被返回子進(jìn)程的id值(大于0),若創(chuàng)建失敗返回“-1”。(1.2)當(dāng)首次調(diào)用新創(chuàng)建進(jìn)程時(shí),其入口在哪里?答:入口就是fork()返回給創(chuàng)建的子進(jìn)程的pid值。(2.1)可執(zhí)行文件加載時(shí)進(jìn)行了哪些處理?答:獲得目錄下所有文件的信息,然后把目錄倒序,再加載到子進(jìn)程中。(2.2)什么是進(jìn)程同步?wait( )是如何實(shí)現(xiàn)進(jìn)程同步的?答:進(jìn)程同步就是不同進(jìn)程按照一定的順序先后執(zhí)行,而不是沒(méi)有順序的或先或后執(zhí)行。Wait()是要等待子進(jìn)程中exit()返回正常軟中斷的信號(hào)時(shí)才結(jié)束等待,執(zhí)
32、行父進(jìn)程wait()后面的代碼。Wait和exit是配合使用的,在進(jìn)程的同步上面,一般wait放在父進(jìn)程中用來(lái)等待子進(jìn)程的exit返回值。(3)無(wú)習(xí)題。答:略。(4)無(wú)習(xí)題。答:略。(5.1)該程序段前面部分用了兩個(gè)wait(0),它們起什么作用?答:等待兩個(gè)子進(jìn)程exit()的返回值再繼續(xù)執(zhí)行下面代碼。(5.2) 該程序段中每個(gè)進(jìn)程退出時(shí)都用了語(yǔ)句exit(0),為什么?答:子進(jìn)程正常退出時(shí),返回值給wait(),再執(zhí)行父進(jìn)程。(5.3) 為何預(yù)期的結(jié)果并未顯示出? 答:由于父子進(jìn)程都同時(shí)接收到c中斷信號(hào),所以兩個(gè)子進(jìn)程在創(chuàng)建之后,signal就得到中斷信號(hào),子進(jìn)程正常中止,并沒(méi)有執(zhí)行sig
33、nal之后的代碼,返回正常中止的信號(hào)給wait(0),父進(jìn)程得到子進(jìn)程正常中止的信號(hào)后就執(zhí)行后面的代碼,輸出“Parent process is killed!”。(5.4) 程序該如何修改才能得到正確結(jié)果?答:在終端發(fā)送指令給父進(jìn)程,或著更換成如下代碼:#include<stdio.h>#include<signal.h> #include<unistd.h> #include<stdlib.h> #include<sys/wait.h> void waiting( ),stop( ),nye( ); int wait_mark; int main( ) int p1,p2,stdout; while(p1=fork( )=-1); if (p1>0) while(p2=fork( )=-1); if(p2>0) wait_mark=1; signal(SIGINT
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年盲頭螺紋嵌件項(xiàng)目可行性研究報(bào)告
- 2025年激光掃描測(cè)微儀項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國(guó)打印機(jī)輥行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年廢塑料一次擠出成型機(jī)項(xiàng)目可行性研究報(bào)告
- 2025年分體式活塞項(xiàng)目可行性研究報(bào)告
- 2025年亮藍(lán)食用色素項(xiàng)目可行性研究報(bào)告
- 2025至2030年中國(guó)飛行仿真模擬訓(xùn)練軟件數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年鉆桿護(hù)絲項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年中國(guó)酒精泵數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年汽車號(hào)牌項(xiàng)目投資價(jià)值分析報(bào)告
- GB/Z 30966.71-2024風(fēng)能發(fā)電系統(tǒng)風(fēng)力發(fā)電場(chǎng)監(jiān)控系統(tǒng)通信第71部分:配置描述語(yǔ)言
- 腦梗死的護(hù)理查房
- 2025高考數(shù)學(xué)專項(xiàng)復(fù)習(xí):概率與統(tǒng)計(jì)的綜合應(yīng)用(十八大題型)含答案
- 產(chǎn)后抑郁癥講課課件
- 2024-2030年中國(guó)紫蘇市場(chǎng)深度局勢(shì)分析及未來(lái)5發(fā)展趨勢(shì)報(bào)告
- 銷售人員課件教學(xué)課件
- LED大屏技術(shù)方案(適用于簡(jiǎn)單的項(xiàng)目)
- 2024智慧城市數(shù)據(jù)采集標(biāo)準(zhǔn)規(guī)范
- Lesson 6 What colour is it(教學(xué)設(shè)計(jì))-2023-2024學(xué)年接力版英語(yǔ)三年級(jí)下冊(cè)
- 歷年國(guó)家二級(jí)(Python)機(jī)試真題匯編(含答案)
- 第五單元任務(wù)二《準(zhǔn)備與排練》教學(xué)設(shè)計(jì) 統(tǒng)編版語(yǔ)文九年級(jí)下冊(cè)
評(píng)論
0/150
提交評(píng)論