程序程式替換:替換乙個程序,排程執行其它程式。
替換原理:替換的是當前子程序的資料段和**段
產生現象:
子程序pid不發生改變。替換函式:五個exec開頭的函式替換成功之後,執行的是替換之後的程式,輸出的內容也和之前的程式無關
不再執行原程序中的**
#include這五個函式都可以載入乙個新的程式到記憶體中,將當前pcb對映到這個新的程式中,排程執行這個新的程式執行。int execl(const char *path,const char *arg,…)
int execlp(const char *path,const char *arg,…)
int execle(const char *path,const char *arg,…,char *const envp)
int execv(const char *path,char *const ar**)
int execvp(const char *file,char *const ar**)
函式之間的區別:
帶l:引數列表可變
帶v:當前函式以字元指標陣列方式進行傳遞引數。
帶p:搜尋環境變數path來查詢替換的程式
不帶p:不會搜尋環境變數,需要自己指定替換程式的路徑
帶e:需要自己組織環境變數
不帶e:使用系統環境變數
這5個函式是庫函式提供的介面。它們都會呼叫系統函式介面:
int execve(const char *path,char *const arr**,char *const envp)示例:帶 l 函式
結果為:
示例:帶 v 函式
結果為:
由上述的兩個小示例可以看出:
程式替換後,不再執行原程序的程式。
函式名引數格式
是否帶路徑
是否使用環境變數
execl列表是
是execlp列表否
是exexle列表是
否execv
字元指標陣列是是
execvp
字元指標陣列否是
execve
字元指標陣列是否
在命令列中啟動程式,就是命令列直譯器(bash),建立子程序,並且讓子程序進行程序程式替換為啟動的程序。
即:命令列中啟動的程式,其父程序是bash。
Linux程序控制 程序替換
使用fork建立的程序和父程序執行的相同的程式 執行不同的 分支 子程序需要執行其他程式需要通過exec函式進行程序替換執行另乙個程式。替換函式 exec函式總共有六個 int execl const char path,const char arg,int execlp const char fi...
Linux程序控制 2 程序等待 程式替換
我們知道,子程序先退出,父程序如果不管不顧,就會導致殭屍程序,進而造成資源洩漏等嚴重問題 一旦產生殭屍程序,殺人不眨眼 的kill 9也無能為力,因為沒有辦法殺死乙個已經僵死的程序 那麼如何避免產生殭屍程序呢?父程序通過程序等待的方式,子程序資源,獲取子程序退出資訊 這裡先說一下阻塞和非阻塞 阻塞 ...
程序控制 程序建立 程序終止 程序等待 程式替換
程序建立 fork vfork vfork 的子程序不能在main函式中return退出 fork 和 vfork clone 同樣可以建立程序或者執行緒,它的引數更多,功能更強大 在核心中都是呼叫 do fork 實現程序的建立,只是引數不同 fork 要建立 pcb,虛擬位址空間,頁表 程序終止...