Linux程式設計 程序終止和exit函式

2021-09-09 02:30:40 字數 939 閱讀 4450

核心要執行乙個應用程式,唯一的途徑是通過系統呼叫。exec函式。exec又會呼叫啟動程式,啟動程式(一般是組合語言)以類似以下的方式呼叫main函式:

void exit(main(argc, ar**));
那麼在main函式末尾使用exit(0)和使用return 0是等價的。

這裡有三個正常終止程式的函式:

void exit(int status);     // 先執行一些清理操作,然後進入核心

void _exit(int status); // 馬上進入核心,可在全部函式中呼叫

void _exit(int status); // 馬上進入核心。可在全部函式中呼叫

exit函式一般做三類事情:

注意最後一步。exit終於還是要呼叫_exit或_exit回到核心。

程序有5種正常終止方式和3種異常終止方式(p178),無論程序怎樣終止,最後都會執行核心中的同一段**。這段**為對應程序關閉全部開打描寫敘述符,釋放它所使用的儲存器等。

以下是乙個程序啟動和退出的總體流程圖:

從上圖能夠看出,核心啟動程式的唯一方法是exec系統呼叫,而程序自願終止(相對於非自願終止,如訊號)的唯一方法是通過exit或_exit或_exit函式回到核心。

注意到上面三個函式的引數status。這是程序退出時的

退出狀態。核心將退出狀態轉換成

終止狀態。該終止狀態可以由該程序的父程序通過wait或waitpid函式捕獲。也就是說父程序可以獲得子程序退出時的終止狀態。

依據上面的描寫敘述。有幾個問題須要考慮:

參考:

《unix環境高階程式設計》 p147-p151、p178.

Linux 程序建立 程序終止

程序終止 fork 在linux中fork函式時非常重要的函式,它從已存在程序中建立乙個新程序。新程序為子程序,而原程序為父程序。include pid t fork void 返回值 自程序中返回0,父程序返回子程序id,出錯返回 1子程序複製父程序的pcb,因此複製了父程序的程式計數器,所以和父...

Linux程序終止訊號

sigterm 該訊號可由程序捕獲,使用該訊號讓程序有機會在退出之前做好清理工作,從而優雅地終止。sigint 當使用者按下中斷鍵 一般採用delete或ctrl c 時,終端驅動程式產生此訊號並傳送至前台程序組中的每乙個程序。sigkill 該訊號不能被程序捕捉和忽略,它向系統管理員提供了一種可靠...

終止前台程序 linux 程序管理

ps precess sstatus 程序狀態 ps aux a 顯示現行終端下所有程式 u 以使用者為主來顯示程式執行狀態 x 不宜終端機來區分 user 使用者名稱pid 執行id cpu 占用cpu百分比 mem 占用記憶體百分比 vsz占用虛擬記憶體大小 rss占用實際記憶體大小 tty終端...