Linux進(jìn)程管理編程(進(jìn)程的創(chuàng)建)_第1頁(yè)
Linux進(jìn)程管理編程(進(jìn)程的創(chuàng)建)_第2頁(yè)
Linux進(jìn)程管理編程(進(jìn)程的創(chuàng)建)_第3頁(yè)
Linux進(jìn)程管理編程(進(jìn)程的創(chuàng)建)_第4頁(yè)
Linux進(jìn)程管理編程(進(jìn)程的創(chuàng)建)_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)訓(xùn)1 Linux進(jìn)程管理命令的使用實(shí)訓(xùn)目標(biāo):(1) 掌握Linux中ps命令使用方法。(2) 掌握Linux中top命令使用方法。實(shí)訓(xùn)內(nèi)容:(1) 使用ps命令查看進(jìn)程。(2) 使用top命令查看進(jìn)程。實(shí)訓(xùn)步驟:(1) 使用ps命令查看進(jìn)程。a. 不帶參數(shù)的ps命令:# psb. 帶參數(shù)的ps命令:# ps aux(2) 使用top命令查看進(jìn)程。 a. 監(jiān)視特定用戶:$ top:輸入此命令,按【Enter】鍵,查看執(zhí)行結(jié)果。 u: 然后輸入“u”按【Enter】鍵,再輸入用戶名,即可。b. 終止指定的進(jìn)程:$ top:輸入此命令,按【Enter】鍵,查看執(zhí)行結(jié)果。 k: 然后輸入“k”按【E

2、nter】鍵,再輸入要結(jié)束的進(jìn) 程ID號(hào)。實(shí)訓(xùn)2 Linux進(jìn)程管理編程(進(jìn)程的創(chuàng)建)實(shí)訓(xùn)目標(biāo):掌握fork()系統(tǒng)調(diào)用的使用。 實(shí)訓(xùn)內(nèi)容:寫出如下程序的執(zhí)行結(jié)果,并畫出該進(jìn)程家族樹。/*fork()*/#include<stdio.h>main()fork(); /*父進(jìn)程1創(chuàng)建子進(jìn)程2*/ fork();/*父進(jìn)程返回后分別再創(chuàng)建各自的子進(jìn)程3、4*/ fork(); /*父進(jìn)程1、2、3、4返回后分別再創(chuàng)建各自的子進(jìn)程5、6、7、8*/putchar(A);/*每個(gè)進(jìn)程都要輸出A*/putchar(n); /*輸出A后按【Enter】鍵換行*/實(shí)訓(xùn)步驟:(1) 新建并編輯fo

3、rk3.c.(2) 編譯fork3.c。 cathyastu 桌面 $ gcc -o fork3 fork3.c(3) 執(zhí)行fork3,結(jié)果如下。 cathyastu 桌面 $ ./fork3 A A A A A A A A cathyastu 桌面 $(4) 查看該進(jìn)程執(zhí)行結(jié)果為八個(gè)“A”,說明有八個(gè)進(jìn)程產(chǎn)生。其進(jìn)程關(guān)系如圖38所示。12354678圖38 調(diào)用三次fork()的進(jìn)程家族樹步驟24的執(zhí)行結(jié)果實(shí)訓(xùn)3 Linux進(jìn)程管理編程(父子進(jìn)程的同步)實(shí)訓(xùn)目標(biāo):掌握fork()系統(tǒng)調(diào)用的使用。實(shí)訓(xùn)內(nèi)容:實(shí)現(xiàn)子進(jìn)程先輸出“B”然后父進(jìn)程再輸出“A”,源程序命名為synl.c。實(shí)訓(xùn)步驟:(1)

4、 編寫源文件synl.c為以下內(nèi)容(執(zhí)行內(nèi)容如圖1): #include<stdio.h> main() int p1; while(p1=fork()=-1); if (p1>0) wait(0); /父進(jìn)程等待子進(jìn)程終止 putchar(A); Putchar(n); else putchar(B); putchar(n); exit(0); /子進(jìn)程向父進(jìn)程發(fā)終止信號(hào)0 (2) 編譯(如圖2)。(3) 執(zhí)行(如圖2): cathyastu 桌面 $ ./synl B A cathyastu 桌面 $ 源程序編譯連接并多次運(yùn)行后的結(jié)果都是子進(jìn)程先輸出“B”父進(jìn)程后輸出“A

5、”,說明父進(jìn)程等待子進(jìn)程的同步關(guān)系成立。圖1圖2實(shí)訓(xùn)4 Linux進(jìn)程管理編程(生產(chǎn)者消費(fèi)者問題)實(shí)訓(xùn)目標(biāo):掌握Linux關(guān)于同步、互斥信號(hào)量的使用。實(shí)訓(xùn)內(nèi)容: 設(shè)父進(jìn)程創(chuàng)建一個(gè)子進(jìn)程作為生產(chǎn)者,創(chuàng)建兩個(gè)子進(jìn)程作為消費(fèi)者,這三個(gè)子進(jìn)程使用一個(gè)共享內(nèi)存,如圖39所示,該共享內(nèi)存定義為具有五個(gè)變量的數(shù)組,每個(gè)變量表示一個(gè)緩沖區(qū),緩沖區(qū)號(hào)為04.生產(chǎn)者進(jìn)程依次往緩沖區(qū)04中寫十個(gè)數(shù)據(jù)110,兩個(gè)讀進(jìn)程依次從緩沖區(qū)04中輪流取出這10個(gè)數(shù)據(jù)。使用信號(hào)量實(shí)現(xiàn)進(jìn)程讀寫緩沖區(qū)的同步和互斥。 分析: (1)需要?jiǎng)?chuàng)建三個(gè)子進(jìn)程:生產(chǎn)者、消費(fèi)者A、消費(fèi)者B; (2)需要使用三個(gè)信號(hào)量:empty、full、mut

6、ex,分別表示緩沖區(qū)是否有空、是否有 數(shù)和互斥信號(hào)量,其初值分別為:5,0,1; (3)需要兩個(gè)共享內(nèi)存:array和get,分別表示多緩沖區(qū)數(shù)組變量array04和消費(fèi) 者讀緩沖區(qū)號(hào)的計(jì)數(shù)get,get計(jì)數(shù)由兩個(gè)消費(fèi)者進(jìn)程共享,由于生產(chǎn)者只有一個(gè), 所以寫緩沖區(qū)的計(jì)數(shù)set不需要使用共享內(nèi)存。實(shí)訓(xùn)步驟:(1) 新建并編輯編寫源文件為以下內(nèi)容:#include<sys/types.h>#include<linux/sem.h>#include<linux/shm.h>#include<unistd.h>#include<stdio.h>

7、;#include<errno.h>#include<time.h>#define MAXSHM 5 /定義緩沖區(qū)數(shù)組的下標(biāo)變量個(gè)數(shù)/*定義信號(hào)量的內(nèi)部標(biāo)識(shí)*/int fullid;int emptyid;int mutexid;int main() /*定義共享內(nèi)存的ID */ int arrayid; int getid; /*定義共享內(nèi)存虛擬地址*/ int *array; int *get; /*創(chuàng)建共享內(nèi)存*/arrayid=shmget(IPC_PRIVATE,sizeof(int)*MAXSHN,IPC_CREAT|0666); getid=shmget(

8、IPC_PRIVATE,sizeof(int),IPC_CREAT|0666); /*初始化共享內(nèi)存*/ array=(int *) shmat(arrayid,0,0); get=(int *) shmat(getid,0,0); *get=0; /* 定義信號(hào)量數(shù)據(jù)結(jié)構(gòu) */ struct sembuf P,V; union semun arg; /* 創(chuàng)建信號(hào)量 */ fullid=semget(IPC_PRIVATE,1,IPC_CREAT|0666); emptyid=semget(IPC_PRIVATE,1,IPC_CREAT|0666); mutexid=semget(IPC_P

9、RIVATE,1,IPC_CREAT|0666); /*初始化信號(hào)量 */ arg.val=0; /初始時(shí)緩沖區(qū)中無(wú)數(shù)據(jù) if(semctl(fullid,0,SETVAL,arg)=-1) perror("semctl setval error"); arg.val=MAXSHM; /初始時(shí)緩沖區(qū)中有5個(gè)空閑的數(shù)組元素 if(semctl(emptyid,0,SETVAL,arg)=-1) perror("semctl setval error"); arg.val=1; /初始時(shí)互斥信號(hào)為1,允許一個(gè)進(jìn)程進(jìn)入 if(semctl(mutexid,0,

10、SETVAL,arg)=-1) perror("semctl setval error"); /* 初始化 P V操作 */ P.sem_num=0; P.sem_op=-1; P.sem_flg=SEM_UNDO; V.sem_num=0; V.sem_op=1; V.sem_flg=SEM_UNDO; /* 生產(chǎn)者進(jìn)程 */ if(fork()=0) int i=0; int set=0; while(i<10) semop(emptyid,&P,1); /對(duì) emptyid執(zhí)行P操作 semop(mutexid,&P,1); /對(duì) mutexid

11、執(zhí)行 P操作 arrayset%MAXSHM=i+1; printf("Producer put number %d to No.%dn",arrayset%MAXSHM,set%MAXSHM); set+; /寫計(jì)數(shù)加1 semop(mutexid,&V,1); /對(duì)mutexid執(zhí)行 V 操作 semop(fullid,&V,1); /對(duì)fullid執(zhí)行 V 操作 i+; sleep(3); /等待消費(fèi)者進(jìn)程執(zhí)行完畢 printf("Poducer if overn"); exit(0); else /* 消費(fèi)者A進(jìn)程 */ if(f

12、ork()=0) while(1) if(*get=10) break; semop(fullid,&P,1); /對(duì)fullid執(zhí)行 P 操作 semop(mutexid,&P,1); /對(duì)mutexid執(zhí)行 P 操作 printf("The ConsumerA get number from No.%dn",(*get)%MAXSHM); (*get)+; /讀計(jì)數(shù)加1 semop(mutexid,&V,1); /對(duì)mutexid執(zhí)行 V 操作 semop(emptyid,&V,1); /對(duì)fullid執(zhí)行 V 操作 sleep(1);

13、printf("ConsunerA is overn"); exit(0); else /*消費(fèi)者B進(jìn)程 */ if(fork()=0) while(1) if(*get=10) break; semop(fullid,&P,1); /對(duì)fullid執(zhí)行 P 操作 semop(mutexid,&P,1); /對(duì)mutexid執(zhí)行 P 操作 printf("The ConsumerA get number from No.%dn",(*get)%MAXSHM); (*get)+; /讀計(jì)數(shù)加1 semop(mutexid,&V,1)

14、; /對(duì)mutexid執(zhí)行 V 操作 semop(emptyid,&V,1); /對(duì)emptyid執(zhí)行 V 操作 sleep(1); printf("ConsunerB is overn"); exit(0); /* 父進(jìn)程返回后回收3個(gè)子進(jìn)程 */ wait(0); wait(0); wait(0); /* 斷開并撤消2個(gè)共享內(nèi)存 */ shmdt(array); shmctl(arrayid,IPC_RMID,0); shmctl(get); shmctl(getid,IPC_RMID,0); /* 撤消3個(gè)信號(hào)量集 */ semctl(emptyid,IPC_RMID,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論