先看fork
返回值:子程序中返回0,父程序中返回子程序id,出錯返回-1。
fork有以下幾個特點:
1.子程序是父程序的副本。子程序獲得父程序資料空間、堆和棧的副本(主要是資料結構的副本)。
2.父子程序不共享這些儲存空間。父子程序共享正文端。
3.子程序對變數所作的改變並不影響父程序中該變數的值。
4.標準i/o是緩衝的,如果標準輸出到終端裝置,則它是行緩衝,否則它是全緩衝。
當以互動方式執行該程式時,只得到printf輸出的行一次,因為標準輸出到終端緩衝區由換行符沖洗。
但將標準輸出重定向到乙個檔案時,由於緩衝區是全緩衝,遇到換行符不輸出。
呼叫fork時,其printf的資料仍然在緩衝區中,該資料將被複製到子程序中,該緩衝區也被複製到子程序中。於是父子程序的都有了帶改行內容的標準i/o緩衝區,所以每個程序終止時,會沖洗其緩衝區中的資料,得到輸出結果。
我們看題一:
#include < unistd.h >
#include < stdio.h >
int main(int argc, char *argv)
return
0;}
這裡輸出8個短槓(-)分析:
我們看題二:
#include < unistd.h >
#include < stdio.h >
int main(int argc, char *argv)
return
0;}
這個程式也是輸出8個-這裡與題一大概的程式一樣,可是理解卻完全不一樣。
我們看題三:
#include < unistd.h >
#include < stdio.h >
int main(int argc, char *argv)
return
0;}
這裡輸出6個-分析:
我們看題四:
#include < unistd.h >
#include < stdio.h >
int main(int argc, char *argv)
return
0;}
這裡輸出3個-分析:
fork的面試題
一 fork入門知識 乙個程序,包括 資料和分配給程序的資源。fork 函式通過系統呼叫建立乙個與原來程序幾乎完全相同的程序,也就是兩個程序可以做完全相同的事。但如果初始引數或者傳入的變數不同,兩個程序也可以做不同的事。乙個程序呼叫fork 函式後,系統先給新的程序分配資源,例如儲存資料和 的空間。...
從一道面試題談Linux下fork的執行機制
某外企面試linux開發職位面試題 給出如下c程式,在linux下使用gcc編譯 要求如下 已知從這個程式執行到這個程式的所有程序結束這個時間段內,沒有其它新程序執行。1 請說出執行這個程式後,將一共執行幾個程序。2 如果其中乙個程序的輸出結果是 pid1 1001,pid2 1002 寫出其他程序...
從一道面試題談linux下fork的執行機制
今天一位朋友去乙個不錯的外企面試linux開發職位,面試官出了乙個如下的題目 給出如下c程式,在linux下使用gcc編譯 include stdio.h include sys types.h include unistd.h int main 要求如下 已知從這個程式執行到這個程式的所有程序結束...