作業系統-程序控制
阿新 • • 發佈:2018-12-04
fork()
使用fork建立一個子程序
在子程序從此時開始執行,並不執行fork前的內容
fork在父程序中返回子程序的PID, 在子程序中返回0
子,父程序是並行執行的,所以輸出可能是摻雜到一起的
# include<stdio.h> main() { int p1, p2; while((p1=fork())== -1); if(p1==0) putchar('b'); else { while((p2=fork())==-1);if(p2==0) putchar('c'); else putchar('a'); } } /* fork表示開啟一個子程序,從程式碼的此處開始執行 區別父子程序是通過fork的返回值 父程序返回子程序的PID 子程序返回0 */
2、wait( ) 等待子程序執行結束。如果子程序沒有完成,父程序一直等待。
呼叫格式: int wait(status) int *status;
其中,status 是使用者空間的地址。
它的低 8 位反應子程序狀態,為 0 表示子程序正常結束,非 0 則表示出現了各種各樣的問題;
高 8 位則帶回了 exit( )的返回值。exit( )返回值由系統給出。
3、exit( )
終止程序的執行。
系統呼叫格式: void exit(status) int status;
其中,status 是返回給父程序的一個整數,以備查考。
為了及時回收程序所佔用的資源並減少 父程序的干預,UNIX/LINUX 利用 exit( )來實現程序的自我終止
通常父程序在建立子程序時,應 在程序的末尾安排一條 exit( ),使子程序自我終止。
exit(0)表示程序正常終止,exit(1)表示進 程執行有錯,異常終止。
如果呼叫程序在執行 exit( )時,其父程序正在等待它的終止,則父程序可立即得到其返回的 整數。核心須為 exit( )完成以下操作: (1)關閉軟中斷 (2)回收資源 (3)寫記帳資訊 (4)置程序為“僵死狀態”