


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、實驗一進程創(chuàng)建【實驗目的和要求】1、1.了解進程的槪念及意義:2. 了解子進程和父進程:3. 掌握創(chuàng)建進程的方法。【實驗內(nèi)容】1、1.子進程和父進程的創(chuàng)建:2. 編寫附件中的程序?qū)嵗?. 撰寫實驗報告?!緦嶒炘怼?、原型:include <unistd. h>pid_t fork(void);在linux中fork函數(shù)時非常重要的函數(shù),它從已存在進程中創(chuàng)建一個新進程。新進程 為子進程,而原進程為父進程。fork函數(shù)創(chuàng)建子進程的過程為:使用fork函數(shù)得到的子進 程是父進程的一個復制品,它從父進程繼承了進程的地址空間,包括進程上下文、進程堆棧、 內(nèi)存信息、打開的文件描述符、信號控
2、制設(shè)龍、進程優(yōu)先級、進程組號、當前工作目錄、根 目錄、資源限制、控制終端,而子進程所獨有的只有它的進程號、資源使用和汁時器等。通 過這種復制方式創(chuàng)建出子進程后,原有進程和子進程都從函數(shù)fork返回,各自繼續(xù)往下運 行,但是原進程的fork返回值與子進程的fork返回值不同,在原進程中,fork返回子進 程的pid,而在子進程中,fork返回0,如果fork返回負值,表示創(chuàng)建子進程失敗。子進程和父進程繼續(xù)執(zhí)行fork調(diào)用之后的指令。子進程是父進程的副本。例如,子進 程獲得父進程數(shù)據(jù)空間、堆和棧的副本。注意,這是子進程所有用的副本。父進程和子進程 并不共享這些存儲空間部分。父進程和子進程共享正文段
3、。2、原型:include <unistd. h>pid_t vfork(void);vfork函數(shù)的調(diào)用序列和返回值與fork相同,但兩者的語義不同。vfork函數(shù)用于創(chuàng)建 一個新進程,而該進程的目的是exec -個新程序。vfork不將父進程的地址空間完全復制 到子進程中,因為子進程會立即調(diào)用exec,它在父進程的空間中運行。vfork保證子進程先 運行,在它調(diào)用exit之后父進程才可能被調(diào)度運行,當子進程調(diào)用這兩個函數(shù)中的任意一 個時,父進程會恢復運行?!境绦虼a】1、l_fork.c#include <stdio. h>#include <stdlibh&
4、gt;#include <unistdh>int var = 10;int main(int argc,char *argv)pid_t pid;int num = 9;pid = fork();if(pid<0)/fork函數(shù)創(chuàng)建進程失??!perror (z,fork,z);if(pid=0)/ 子進程var+;num+;printf (,zin son process var = %d, num=%dn,z, var, num):else/父進程sleep(l);printf ("in father process var=od, nuni=%dn",
5、 var, num);printf (''common code arean,z):return 0;2、2_vfork. c#include <stdio. h>#include <stdlibh>#include <unistdh>int var = 10;int main(int argc, char *argv)pid_t pid;int num = 9;pid = vfork() ;/創(chuàng)建進程if(pid<0)perror (,zvfork,z);辻(pid = 0)var+;num+;printf ("in son
6、 process var=od, num=%dn", var, num); _exit(0);elseprintf ("in father process var=od, num=odn,z, var, num);return 0;【實驗步驟】1、打開終端,輸入命令gedit l_fork. c,在l_fork. c文件中輸入l_fork bmp 中的代碼;2、輸入命令gcc l_fork. c -o l_fork,回車后顯示無錯誤;3、輸入命令:./l.fork運行程序。1 打開終端,輸入命令gedit 2_vfork. c,在2_vfork. c文件中輸入2_vfork
7、. bmp中的代碼;2、輸入命令gcc 2_vfork. c -o 2_vfork»回車后顯示無錯誤:3、輸入命令:./2_vfork運行程序?!緦嶒灲Y(jié)果】1、 f unsp(munsp-vlrtual-machlne: 文件(F)5S(E) S(V)搜索(S)終錦(T)幫助(H)unsp(3unspviftual-machine:-$ gedit I fork c unspunspvictuamachine:-$ gcc l_forkc -o l_fork unsp(aunsp v i ft ua I-machine :$ / I fork in son process var=l
8、lfnum=10 common code areain father process var=10r num=9 conmon code areaunspunsp virtualmachine:-$從上面可以看到兩次的運行結(jié)果不一樣。我們知道write函數(shù)是不帶緩存的。因為在 fork之前調(diào)用write,所以苴數(shù)據(jù)寫到標準輸出一次。但是,標準I/O庫是帶緩存的。如 果標準輸出連到終端設(shè)備,則它是行緩存的,否則它是全緩存的。當以交互方式運行該程序 時,只得到printf輸岀的行一次,其原因是標準輸岀緩存由新行符刷新。但是當將標準輸 出重新左向到一個文件時,卻得到printf輸岀行兩次。其原因是,
9、在fork之前調(diào)用了 printf 一次,當調(diào)用fork時,該行數(shù)據(jù)仍在緩存中,然后在父進程數(shù)據(jù)空間復制到子進程中時, 該緩存數(shù)據(jù)也被復制到子進程中。于是那時父、子進程各自有了帶該行內(nèi)容的緩存。在亡xit 之前的第二個printf將其數(shù)據(jù)添加到現(xiàn)存的緩存中。當每個進程終止時,其緩存中的內(nèi)容 被寫到相應文件中。2、unspunsp-virtual-machine:-文件(F)編輯(E)查看(V)度索(S)終端仃)嵇助(H) unspunspvirtuaachine:$ gedit 2_vforkc unsp(aunspvirtual-machine:$ gcc 2_vfork.c o 2_vfo
10、rk unspunspvirtual-machine:$ /2 vfork in son process var=nFnum=i0 in father process var=ll,num=10 unspunspvirtual-machine:$ |因為我們知道vfork保證子進程先運行,子進程運行結(jié)朿后,父進程才開始運行。所以, 第一次打印的是子進程的打印的信息,可以看到var值變成了 11。子進程結(jié)束后,父進程 運行,父進程首先打印fork調(diào)用返回給他pid的值(就是子進程pid)。以上我們可以看出, vfork創(chuàng)建的子進程和父進程運行的地址空間相同(子進程改變了 var值,父進程中的var 值也進行了改變).【實驗體會】1、由fork創(chuàng)建的新進程被稱為子進程(child process) o該函數(shù)被調(diào)用一次, 但返回兩次。兩次返回的區(qū)別是子進程的返回值是0,而父進程的返回值則是新子 進程的進程ID。2、將子進程ID返回給父進程的理由是:因為一個進程的子進程可以多于一 個,所有沒有一個函數(shù)使一個進程可以獲得英所有子進程的進程ID. fork使子進程 得到返回值0的理由是:一個進程只會有一個父進程,所以子進程總是可以調(diào)用 getppi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度宅基地房屋贈與受贈方后續(xù)使用協(xié)議
- 2025年度海景房房屋買賣協(xié)議書
- 二零二五年度學校食堂炊事員崗位聘用及食品安全責任保險服務合同
- 2025年度能源行業(yè)人員派遣勞務合同
- 二零二五年度文化活動免責的舉辦協(xié)議
- 二零二五年度餐廳租賃服務及品牌合作協(xié)議
- 二零二五年度企業(yè)資產(chǎn)質(zhì)押貸款合同
- 臨時工用工合同-2025年度制造業(yè)合作協(xié)議
- 2025年度旅游意外傷害保險責任免除合同
- 二零二五年度勞動合同解除協(xié)議書-員工合同續(xù)簽協(xié)商解除
- 中國文化概況chapter-1
- 大學生職業(yè)素養(yǎng)訓練(第六版)課件全套 宋賢鈞 第1-14單元 選擇職業(yè)目標- 堅守安全底線
- 期中測試卷(1~4單元)(試題)2024-2025學年四年級上冊數(shù)學北師大版
- 2024年鐵路安檢員理論題庫多選題
- 2024-2025學年初中勞動七年級下冊人教版教學設(shè)計合集
- 煤礦煤炭銷售管理制度
- 《語文綜合實踐:重溫革命歷史 賡續(xù)紅色血脈》教案- 2023-2024學年高教版(2023)中職語文基礎(chǔ)模塊下冊
- 2024年公開招聘事業(yè)單位工作人員報名登記表
- 植樹節(jié)英文主題課件
- 微觀經(jīng)濟學:緒論
- 2024年全國高考數(shù)學試題及解析答案(新課標Ⅱ卷)
評論
0/150
提交評論