異常控制流中的fork()

2021-09-29 09:10:37 字數 938 閱讀 5844

fork是用於建立子程序的函式,他和其他的函式有所區別,有趣的是:

int main()

}printf("bye\n");

exit(2);

}

這個例子中wafexited指的是如果子程序通過呼叫exit或者乙個返回(return)正常終止,就返回真,wexitstatus是指返回乙個正常終止的子程序的退出狀態。搞清楚這兩個東西之後我們分析這個程式:

首先列印hello,然後產生子程序,這時下一步同時有兩個程序在執行,根據「父真子假」的原則,!pid取反,那麼子程序會列印出「1」,而父程序會列印出「0」,之後if條件語句只有父程序會進入,進入之後父程序呼叫waitpid等待子程序退出,而子程序此時跳過if直接列印bye然後退出被父程序**,**之後父程序進入下乙個if語句,由於子程序是正常終止,所以在此進入下乙個if語句,最後列印「1」。當然後面也會繼續列印bye然後正常退出。其程序結構圖和執行結果圖如下:

另外乙個例子是:

else 

printf("bye\n");

}

該段****現了wait函式,其實wait是waitpid的簡化版本,呼叫wait(&status)就相當於呼叫waitpid(-1,&status,0)。我們分析第乙個if裡面有fork,從這裡開始產生了乙個子程序子程序裡執行if**塊中的語句,父程序裡執行else**塊裡的語句。子程序列印hc一句,父程序裡列印hp語句,之後便等待子程序正常退出,子程序通過exit退出,之後便被父程序**了。然後父程序列印ct語句,再列印bye。其程序結構圖和執行結果如下:

異常控制流

異常控制流 在作業系統執行程式時,作業系統會把程式具體到每條指令,利用程式指標順序執行指令以達到程式執行的目的。這些指令類似乙個集合,稱之為控制流。程式指標依次執行每條指令,稱之為控制轉移。但是在程式執行過程中因為種種原因,程式狀態發生變化,程式指標不會依次執行這些程式指令,引起程式狀態變化的是存在...

異常控制流

作業系統通過使控制流程發生突變來響應系統狀態變化,這些突變就是異常控制流 exceptional control flow,ecf 異常控制處理流程 1.系統啟動時,作業系統分配和初始化一張異常表,使得索引為k的條目對應異常號為k的處理程式的位址。2.系統執行時,處理器檢測到狀態變化,確定相應的異常...

異常控制流

從給處理器加電開始,直到斷電為止,程式計數器假設乙個值的序列a 0,a 1,a n 1,其中,每個a k是某個相應的指令i k的位址。每次從a k到a k 1 的過渡稱為控制轉移。這樣的控制轉移序列叫做處理器的控制流 現代系統通過使控制流發生突變來對這些情況作出反應,這些突變稱為異常控制流 ecf ...