linux fork

1. 編寫一段程序,使用系統調用fork( )建立兩個子進程。當此程序運行時,在系統中有一個父進程和兩個子進程活動。讓每個進程在屏幕上顯示一個字符:父進程顯示'a',子進程分別顯示字符'b'和字符'c'。多執行幾回,觀察並記錄屏幕上的顯示結果,分析緣由, 寫入實驗報告。編輯器

截圖:函數

clip_image002

緣由:以下圖解釋3d

clip_image004

2. 修改上述程序,每個進程循環顯示一句話。子進程顯示'daughter…'及'son…',父進程顯示 'parent…',多執行幾回,觀察並記錄屏幕上的顯示結果,分析緣由, 寫入實驗報告。blog

同1同樣進程

clip_image006

3. 利用vi編輯器,建立源代碼文件ft1.c,內容以下ip

#include <stdio.h>get

int main(void) it

{io

int i;cli

for(i=0; i<2; i++)

{

fork();

printf("-");

}

return 0;

}

觀察並記錄屏幕上的顯示結果,分析緣由,寫入實驗報告。

結果:

clip_image008

緣由:

這時,打印出的「-」被執行了8次,能夠從下圖(手畫)獲得解釋:

clip_image010

4. 修改ft1.c,內容以下

#include <stdio.h>

int main(void)

{

int i;

for(i=0; i<2; i++)

{

fork();

printf("-\n");

}

return 0;

}

注意代碼的修改,多執行幾回,觀察並記錄屏幕上的顯示結果,分析緣由,寫入實驗報告。

clip_image012

打印出6次,理由是加上\n後,printf被馬上打印,因此子進程不會複製父進程的緩衝內容;即只打印6次,分別出處以下:

clip_image014

5. 總結性解釋說明:爲何fork()調用一次,返回兩次

在fork函數執行完畢後,若是建立新進程成功,則出現兩個進程,一個是子進程,一個是父進程。在子進程中,fork函數返回0,在父進程中,

fork返回新建立子進程的進程ID。咱們能夠經過fork返回的值來判斷當前進程是子進程仍是父進程。

其實就至關於鏈表,進程造成了鏈表,父進程的fpid(p 意味point)指向子進程的進程id,

由於子進程沒有子進程,因此其fpid爲0.

相關文章
相關標籤/搜索