先來看乙個題目:
當父程序呼叫fork()
建立子程序之後,下列哪些變數在子程序中修改之後,父程序裡也會相應地作出改動?
a.全域性變數
b.區域性變數
c.靜態變數
d.檔案指標
答案為d,解釋如下:
fork()子程序和父程序共享的資源
:
開啟的檔案
實際使用者id
、實際組
id、有效使用者
id、有效組
id新增組id
程序組id
對話期id
控制終端。
設定-使用者
-id標誌和設定-組
-id標誌
當前工作目錄
根目錄檔案方式建立遮蔽字
訊號遮蔽和排列
對任一開啟檔案描述符的在執行時關閉標誌
環境連線的共享儲存段(共享記憶體)
資源限制
父、子程序之間的區別是:
fork的返回值
程序id
不同的父程序id
子程序的tms_utime,tms_stime,tms_cutime
以及tms_ustime
設定為0
父程序設定的鎖,子程序不繼承
子程序的未決告警被清除
子程序的未決訊號集設定為空集
fork後父子程序共享資源
unix環境高階程式設計中8.3節中說,子程序是父程序的副本。例如,子程序獲得父程序資料空間 堆和棧的副本。注意,這是子程序所擁有的副本。父程序和子程序並不共享這些儲存空間部分。父程序和子程序共享正文段。書中還預留了例子說明子程序對變數所做的改變並不影響父程序中該變數的值。fork.c 父子程序共享...
父子程序資料共享問題
1 fork cpp view plain copy include include pid t fork void 正確返回 父程序中返回子程序的程序號 子程序中返回0 錯誤返回 1 子程序是父程序的乙個拷貝。子程序從父程序那得到了資料段和堆疊段,但不是與父程序共享而是單獨分配記憶體。fork函式...
程序的資源共享
程序是放到記憶體中的,程序中所有的計算過程都是需要在cpu處理的。當有多個程序都需要使用共享資源的時候就需要借助乙個中間過程 臨界區 臨界區的使用原則 空則讓進,忙則等待,等則有限,等則讓權 當共享資源沒有被使用的時候就將某個需要使用的程序放到臨界區中,在這段時間中只能是臨界區中的程序可以使用共享資...