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函式,程序資源終止的方法唯有b)儲存空間分布exit
系,非自願終止由訊號
i. 命令列引數與環境引數
ii. 函式棧:自高位址向低位址生長,各個函式的函式棧幀按呼叫順序放置其中。【函式棧幀】中包括函式的自動變數與每次呼叫所需儲存的資訊
iii. 堆:自低位址向高位址生長,new、malloc
的同喜都在這兒
iv. 靜態全域性區
v. 正文段(程式二進位制**存放區)
vi. goto是函式內跳躍;a) forksetjump
與longjump
是向上面一樣退棧幀
i. 完全拷貝父程序,拷貝的時候拷貝的是檔案描述符,所以父子程序共享檔案【競態條件】,訪問的時候需要同步b)孤兒程序與僵死程序【ps檢視程序資訊,z,僵死程序】
i. 【孤兒程序】:父程序先於子程序退出,子程序就成了孤兒程序,孤兒程序會被init程序收養,init
程序負責子程序的資源的**。
ii. 【僵死程序】:子程序先於父程序退出。退出時會發出sigchld訊號,父程序沒有忽略或捕捉該訊號,在訊號處理函式中沒有對子程序進行wait
(即沒有發生收屍行為),子程序就會成為僵死程序,即不工作,也不釋放占用的資源(給程序設定殭屍狀態的目的是維護子程序的資訊,以便父程序在以後某個時間獲取。父程序結束之後,僵死程序作為沒有父程序的子程序成為孤兒程序,然後被init收養,最後釋放)。
1. 忽略sigchld訊號(piox
不行)
2. 捕捉sigchld訊號,在訊號處理函式中,用c) 實際使用者、有效使用者和儲存設定使用者wait
(無法處理併發子程序僵死的問題)
/waitpid
i. 程序id:程序的識別符號
ii. 程序組id:本程序所在程序組的識別符號
iii. 實際使用者id:當前程序的執行者的識別符號
iv. 有效使用者id:程序對資源的許可權,程序可以訪問有效使用者可以操作的資源許可權
v. 儲存設定使用者id:有效使用者d) execid的副本
i. 呼叫exec執行新程式,但並不建立新程序,所以程序e) systemid不變,只是替換了當前程序的正文段、資料段、堆段和棧段
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 程序...