《unix高階環境程式設計》程序環境 程序終止

2021-06-27 06:04:56 字數 1704 閱讀 5396

當核心執行c程式時(使用乙個exec函式執行),在呼叫mian函式前先呼叫乙個特殊的啟動例程。可執行程式檔案將此啟動例程指定為程式的起始位址。下面是c程式啟動和終止的流程,由圖中可以知道,程序的終止根據不同的函式呼叫是不一樣的,其中_exit和_exit函式是終止程序直接進入核心,exit函式則先執行一些清理,然後在進入核心。核心是程式執行的方法只有呼叫exec函式。虛線框裡面表示使用者程序。

unix中有8種程序終止方式,其中5種是正常終止,3種是異常終止。如下所示:

正常終止:

從main函式返回。

呼叫exit函式。

呼叫_exit或_exit函式。

最後乙個執行緒從其啟動例程返回。

最後乙個執行緒呼叫pthread_exit。

異常終止:

呼叫abort函式。

接到乙個訊號並終止。

最後乙個執行緒對取消請求做出響應。

exit函式

下面三個函式都是屬於正常終止程序,_exit和_exit直接進入核心,exit函式需要執行一些清理操作(例如終止處理程式、關閉標準i/o流等操作),然後才進入核心。

[cpp]view plain

copy

/* 正常終止程式函式 */

#include 

void

exit(

intstatus);

//進入核心之前執行一些清理操作

void

_exit(

intstatus);

//直接進入核心

#include 

void

_exit(

intstatus);

//直接進入核心

//引數status為終止狀態

atexit函式

exit函式自動呼叫終止處理程式函式,這些終止處理程式函式由atexit函式進行登記,exit根據atexit登記的順序,相反順序的呼叫終止處理程式函式,同乙個函式若登記多次,則exit函式就多次呼叫該函式。atexit函式的引數是乙個函式位址。

[cpp]view plain

copy

#include 

intatexit(

void

(*func)(

void

));  

//返回值:若成功則返回0,若出錯則返回非0值

測試exit的執行過程:

[cpp]view plain

copy

#include 

#include 

#include "apue.h"

static

void

my_exit1(

void

);  

static

void

my_exit2(

void

);  

intmain(

void

)    

static

void

my_exit1(

void

)    

static

void

my_exit2(

void

)    

《unix高階環境程式設計》程序環境 環境變數

環境字串一般表示如下 cpp view plain copy name value 環境變數名,環境變數值 以下根據對環境變數不同的操作得到不同的結果,包括獲取環境變數當前值,新增環境變數,修改環境變數和刪除環境變數 相對應的函式分別為getenv putenv setenv和unsetenv函式,...

unix環境高階程式設計 守護程序

守護程序 daemon 是生存期長的一種程序,常常在系統引導裝入時啟動,僅在系統關閉時終止,因為它們沒有控制終端,unix有很多守護程序,它們執行日常事務活動。守護程序的特徵 執行指令 ps zxj a顯示其他使用者擁有的程序狀態,x顯示沒有終端控制的程序狀態,j顯示與作業有關的資訊 會話id 程序...

UNIX環境高階程式設計 守護程序

守護程序也稱精靈程序,是生存期較長的一種程序。它們通常在系統自舉時啟動,僅在系統關閉時才終止。因為它們沒有控制終端,所以它們都是在後台執行的。各標題意義 父程序id,程序id,程序組id,會話id,終端名稱,終端程序組id,使用者id 系統程序依賴於作業系統實現。父程序id為0的各程序通常是核心程序...