unix環境高階程式設計 程序環境與程序控制

2021-07-24 08:34:24 字數 2573 閱讀 1944

a) 終止

i. 程序終止

1. 正常終止:return+exit、

_exit

a) 【exit與

_exit

的區別】:exit退出時按

atexit

註冊的相反順序呼叫註冊過的函式,對開啟的流呼叫

fclose

將緩衝區的資料寫到檔案上(重新整理緩衝區)。

_exit

沒有

b) 【exit與自然返回

return

的區別】:return返回上層的函式呼叫,

exit

直接結束程序

2. 異常終止:訊號+abort+執行緒響應取消

ii. 執行緒終止

1. 正常終止:pthread_exit

2. 異常終止:訊號+abort+執行緒響應取消

iii. 核心使程式執行的方法只有exec函式,程序資源終止的方法唯有

exit

系,非自願終止由訊號

b)儲存空間分布

i. 命令列引數與環境引數

ii. 函式棧:自高位址向低位址生長,各個函式的函式棧幀按呼叫順序放置其中。【函式棧幀】中包括函式的自動變數與每次呼叫所需儲存的資訊

iii. 堆:自低位址向高位址生長,new、

malloc

的同喜都在這兒

iv. 靜態全域性區

v. 正文段(程式二進位制**存放區)

vi. goto是函式內跳躍;

setjump

與longjump

是向上面一樣退棧幀

a) fork

i. 完全拷貝父程序,拷貝的時候拷貝的是檔案描述符,所以父子程序共享檔案【競態條件】,訪問的時候需要同步

b)孤兒程序與僵死程序ps檢視程序資訊,z,僵死程序】

i. 【孤兒程序】:父程序先於子程序退出,子程序就成了孤兒程序,孤兒程序會被init程序收養,

init

程序負責子程序的資源的**。

ii. 【僵死程序】:子程序先於父程序退出。退出時會發出sigchld訊號,父程序沒有忽略或捕捉該訊號,在訊號處理函式中沒有對子程序進行

wait

(即沒有發生收屍行為),子程序就會成為僵死程序,即不工作,也不釋放占用的資源(給程序設定殭屍狀態的目的是維護子程序的資訊,以便父程序在以後某個時間獲取。父程序結束之後,僵死程序作為沒有父程序的子程序成為孤兒程序,然後被init收養,最後釋放)。

1. 忽略sigchld訊號(

piox

不行)

2. 捕捉sigchld訊號,在訊號處理函式中,用

wait

(無法處理併發子程序僵死的問題)

/waitpid

c) 實際使用者、有效使用者和儲存設定使用者

i. 程序id:程序的識別符號

ii. 程序組id:本程序所在程序組的識別符號

iii. 實際使用者id:當前程序的執行者的識別符號

iv. 有效使用者id:程序對資源的許可權,程序可以訪問有效使用者可以操作的資源許可權

v. 儲存設定使用者id:有效使用者

id的副本

d) exec

i. 呼叫exec執行新程式,但並不建立新程序,所以程序

id不變,只是替換了當前程序的正文段、資料段、堆段和棧段

e) system

i. system(「系統命令」)

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

當核心執行c程式時 使用乙個exec函式執行 在呼叫mian函式前先呼叫乙個特殊的啟動例程。可執行程式檔案將此啟動例程指定為程式的起始位址。下面是c程式啟動和終止的流程,由圖中可以知道,程序的終止根據不同的函式呼叫是不一樣的,其中 exit和 exit函式是終止程序直接進入核心,exit函式則先執行...

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

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

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

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