exec命令手冊
exec:調(diào)用并執(zhí)行指定的命令
功能描述
exec命令用于調(diào)用并執(zhí)行指定的命令。exec命令通常用在shell腳本程序中,可以調(diào)用其他的命令。如果在當前終端中使用命令,則當指定的命令執(zhí)行完畢后會立即退出終端。
命令語法
exec?[選項]
選項含義
| 選項 | 含義 |
|---|---|
| -c | 使用一個空環(huán)境來執(zhí)行 |
| -a | shell會將名字作為零參數(shù)傳遞給執(zhí)行的命令 |
| -l | 在shell的開頭放置一個破折號參數(shù)傳遞給命令 |
參考實例
實例1
//?首先使用echo命令將文本“www.linuxyz.cn”進行輸出:
[root@cnLinuxer?~]#?echo?www.linuxyz.cn
www.linuxyz.cn
//?然后再使用exec命令調(diào)用echo命令輸出同樣的信息,并且對輸出的信息進行對比,輸入指令如下所示:
[root@cnLinuxer?~]#?exec?-c?echo?www.linuxyz.cn
www.linuxyz.cn
//?通過比較兩者執(zhí)行后的結(jié)果來看,所實現(xiàn)的功能是相同的,即使用exec命令調(diào)用echo命令成功。
實例2
//?//?查找te.txt?并備份為te.txt.bak
[root@host132?~]#?find?/test?-name?"te.txt"?-exec?cp?{}?{}.bak?\;
知識擴展
一、系統(tǒng)調(diào)用 exec 是以新的進程去代替原來的進程,但進程的PID保持不變。因此,可以這樣認為,exec系統(tǒng)調(diào)用并沒有創(chuàng)建新的進程,只是替換了原來進程上下文的內(nèi)容。原進程的代碼段,數(shù)據(jù)段,堆棧段被新的進程所代替。
一個進程主要包括以下幾個方面的內(nèi)容:
一個可以執(zhí)行的程序
與進程相關(guān)聯(lián)的全部數(shù)據(jù)(包括變量,內(nèi)存,緩沖區(qū))
程序上下文(程序計數(shù)器PC,保存程序執(zhí)行的位置)
二、exec是一個函數(shù)簇,由6個函數(shù)組成,分別是以excl和execv打頭的。
執(zhí)行exec系統(tǒng)調(diào)用,一般都是這樣,用fork()函數(shù)新建立一個進程,然后讓進程去執(zhí)行exec調(diào)用。我們知道,在fork()建立新進程之后,父進各與子進程共享代碼段,但數(shù)據(jù)空間是分開的,但父進程會把自己數(shù)據(jù)空間的內(nèi)容copy到子進程中去,還有上下文也會copy到子進程中去。而為了提高效率,采用一種寫時copy的策略,即創(chuàng)建子進程的時候,并不copy父進程的地址空間,父子進程擁有共同的地址空間,只有當子進程需要寫入數(shù)據(jù)時(如向緩沖區(qū)寫入數(shù)據(jù)),這時候會復制地址空間,復制緩沖區(qū)到子進程中去。從而父子進程擁有獨立的地址空間。而對于fork()之后執(zhí)行exec后,這種策略能夠很好的提高效率,如果一開始就copy,那么exec之后,子進程的數(shù)據(jù)會被放棄,被新的進程所代替。
有收獲,點個在看?
