替換**段和資料段,從磁碟載入新的**段和資料段到物理記憶體,用頁表對映回程序虛擬位址空間的**段、資料段,同時應該將堆疊、命令列引數等變為最初狀態,pid 不變、環境變數不變、
exec 函式簇:多個 ecec 結構的函式
int
execl
(const
char
* path,
const
char
* arg,..
.)path: 帶路徑的可執行程式,絕對或相對路徑
arg: 給可執行程式傳遞的引數,規定:第乙個引數必須是可執行程式的名稱..
.: 可變引數列表,引數列表要以 null 標誌引數結束
l :可變引數列表的函式,引數列表要以 null 標誌引數結束
int
execlp
(const
char
* file,
const
char
* arg,..
.)file: 可執行檔案的名稱,可執行程式是必須在環境變數 path 當中可以找到的,也可以直接傳入可執行程式的絕對路徑
p :如果帶 p,要替換的程式可以直接給乙個程式的名稱,回去搜尋當前環境變數
int
execle
(const
char
* path,
const
char
* arg,..
.,char
* consst envp)
envp: 給當前所要替換的程式設定環境變數,要以 null 結尾
e :如果帶有 e,則需要自己去組織環境變數的內容
int
execv
(const
char
* path,
const
char
* ar**)
ar**: 傳入字元陣列指標,而不是可變引數列表
v :如果帶有 v,則表示需要傳入的程式命令列引數為字元陣列指標,而不是可變引數列表,字元陣列依舊需要以 null 結尾
其中,系統呼叫為 execve,其他的為庫函式
守護程序
基本具備的條件:server 可執行程式,守護程序的程式
守護程序是由守護程式啟動的,在守護程序當中,使用到了建立子程序+程序程式替換+程序間通訊(判斷子程序是否執行正常)
獲取狀態發現 server 可執行程式並沒有更改,則認為 server 狀態異常,執行策略就是重新建立子程序,讓子程序程式替換,替換為新的 server 可執行程式
server 可執行程式:通過程序間通訊,每隔一段時間告訴父程序當前的狀態
shell終端
1.啟動 bash 可執行程式
2.當使用者輸入命令時,建立子程序,子程序程序程式替換
3.在子程序程序程式替換時,如果是前台程序,則 bash 負責程序等待
替換程序exec
1 exec函式族 讓父子程序執行不相干的操作 能夠替換程序位址空間的源 txt 段 當前程式中呼叫另外乙個應用程式 首先想到 exec 之前需要 fork 返回值 如果函式執行成功,不返回 不如執行失敗,列印錯誤資訊,退出當前程序 1 實現換核不換殼功能 2 執行乙個另外的程式不需要建立額外的位址...
程序替換和exec函式族
fork 建立的子程序一般不會執行和父程序相同的 段,而是呼叫exec相關函式,將該程序的使用者空間 和資料完全替換,子程序從替換的新程式啟動執行。exec僅僅是替換 和資料,並不會建立新程序,所以被替換的程序 id 和子程序 id 相等。如下圖 新程序從呼叫程序繼承了下列屬性 exec函式族 函式...
Linux 程序中的替換函式(exec)
摘要 本文主要講述如何在程序中執行新 以及exec系列函式的基本使用方法.在程序中執行新 用函式fork建立子程序後,如果希望在當前子程序中執行新的程式,可以呼叫exec函式執行另乙個程式.當程序呼叫exec函式時,該程序使用者空間資源 正文 資料 堆和棧 完全由新程式替代,新程式則從main函式開...