1.fork函式
fork從已存在的程序中建立乙個新程序,新程序為子程序,原程序為父程序。
fork返回值:
在fork返回時,新程序已經建立完畢,子程序返回0,父程序返回子程序的pid
在執行fork時,核心做了以下幾件事:
1.分配新的記憶體塊和pcb給子程序
2.複製父程序的部分pcb內容給子程序
3.將子程序新增到系統程序列表中
4.fork返回,開始排程器排程
fork後,父子程序**共享,資料寫時拷貝
fork失敗的原因:
1.系統中有太多程序
2.使用者的程序數超過了限制
2. vfork函式正常終止
1.從main函式返回
2.呼叫exit或_exit
異常終止
1.訊號終止
exit與_exit的區別
_exit:直接退出
exit:
1.執行使用者定義的清理函式
2.沖刷緩衝區,關閉所有開啟的流
3.呼叫_exit
作用:父程序通過程序等待的方式,**子程序資源,獲取子程序的退出資訊
程序等待的方法
1.wait
pid_t wait(int* status);
任意乙個子程序退出,wait都會返回,返回值為退出子程序的pid,引數為程序退出的狀態,可以設定為null
2.waitpid
pid_t waitpid(pid_t pid,int* status,int options);
當引數pid=-1時,waitpid等同於wait,等待任意乙個子程序
當引數pid>0時,waitpid等待程序id為pid的子程序返回
可以通過設定options為wnohang將waitpid設定為非阻塞式等待
大部分情況下,我們建立子程序是為了讓它執行其他程式,而不是把父程序的程式多執行一次,可以通過exec函式族來進行程式替換
當程序呼叫exec函式時,程序的使用者空間**和資料完全被新程式替換,從新程式的入口開始執行,exec程式的程序id仍舊是原子程序的pid
linux 程序控制
什麼是程序 每乙個程序在系統中都有唯一的id標示它,此id為程序標示符 程序標示符的型別 pit t,其實是乙個無符號整形 乙個程序標示符對應唯一的乙個程序,多個程序標示符可以對應同乙個程式 程序和程式的區別 程式 可執行的二進位制 檔案,這種檔案載入到記憶體中執行就得到了乙個程序 程序 同乙個程式...
Linux程序控制
linux程序控制 獲取pid include include pid t getpdi void 獲取本程序id pdi t getppid vodi 獲取父程序id,及獲取建立子程序的程序id 程序建立 include pid t fork void 建立子程序 呼叫一次返回兩次值 1.父程序中...
linux程序控制
linux程序控制 編寫命令直譯器 一 背景 之前在 計算機作業系統 這本書中已經多次接觸了程序這一概念,而程序在作業系統中具體是做什麼的呢?卻沒有實際的與程序發生過互動,因此也就沒有實際的感受。對於我來說程序僅僅停留在概念的層面上 程序是程式執行時的記憶體空間和設定或者說程序就是程式的進行時。沒有...