1. 程式人生 > >作業系統-程序控制

作業系統-程序控制

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)置程序為“僵死狀態”