1. 編寫一段程序,使用系統調用fork( )建立兩個子進程。當此程序運行時,在系統中有一個父進程和兩個子進程活動。讓每個進程在屏幕上顯示一個字符:父進程顯示'a',子進程分別顯示字符'b'和字符'c'。多執行幾回,觀察並記錄屏幕上的顯示結果,分析緣由, 寫入實驗報告。編輯器
截圖:函數
緣由:以下圖解釋3d
2. 修改上述程序,每個進程循環顯示一句話。子進程顯示'daughter…'及'son…',父進程顯示 'parent…',多執行幾回,觀察並記錄屏幕上的顯示結果,分析緣由, 寫入實驗報告。blog
同1同樣進程
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;
}
觀察並記錄屏幕上的顯示結果,分析緣由,寫入實驗報告。
結果:
緣由:
這時,打印出的「-」被執行了8次,能夠從下圖(手畫)獲得解釋:
4. 修改ft1.c,內容以下
#include <stdio.h>
int main(void)
{
int i;
for(i=0; i<2; i++)
{
fork();
printf("-\n");
}
return 0;
}
注意代碼的修改,多執行幾回,觀察並記錄屏幕上的顯示結果,分析緣由,寫入實驗報告。
打印出6次,理由是加上\n後,printf被馬上打印,因此子進程不會複製父進程的緩衝內容;即只打印6次,分別出處以下:
5. 總結性解釋說明:爲何fork()調用一次,返回兩次
在fork函數執行完畢後,若是建立新進程成功,則出現兩個進程,一個是子進程,一個是父進程。在子進程中,fork函數返回0,在父進程中,
fork返回新建立子進程的進程ID。咱們能夠經過fork返回的值來判斷當前進程是子進程仍是父進程。
其實就至關於鏈表,進程造成了鏈表,父進程的fpid(p 意味point)指向子進程的進程id,
由於子進程沒有子進程,因此其fpid爲0.