跳至內容

Linux exec命令手冊

更新時間
连续6年不跑路的安全速度最适合国人VPN
连续6年不跑路的安全速度最适合国人VPN

功能描述

exec命令在Linux中用於調用並執行指定的命令。通常在shell腳本中使用exec命令來執行其他命令。當在當前終端中使用exec命令時,指定的命令執行完畢後會取代當前進程,而不是創建一個新的子進程。

命令語法

exec [選項]
登錄後複製

選項含義

選項 含義
-c 使用一個空環境來執行
-a shell會將名字作爲零參數傳遞給執行的命令
-l 在shell的開頭放置一個破折號參數傳遞給命令

參考實例

實例1

// 首先使用echo命令將文本“www.linuxyz.cn”進行輸出:[root@bunian ~]# echo www.bunian.cnwww.bunian.cn// 然後再使用exec命令調用echo命令輸出同樣的信息,並且對輸出的信息進行對比,輸入指令如下所示:[root@bunian ~]# exec -c echo www.bunian.cnwww.bunian.cn// 通過比較兩者執行後的結果來看,所實現的功能是相同的,即使用exec命令調用echo命令成功。
登錄後複製

實例2

// 查找bunian.txt 並備份爲bunian.txt.bak[root@bunian ~]# find /test -name "bunian.txt" -exec cp {} {}.bak ;
登錄後複製

知識擴展

一、系統調用 exec 是以新的進程去代替原來的進程,但進程的PID保持不變。因此,可以這樣認爲,exec系統調用並沒有創建新的進程,只是替換了原來進程上下文的內容。原進程的代碼段,數據段,堆棧段被新的進程所代替。

一個進程主要包括以下幾個方面的內容:

  • 一個可以執行的程序
  • 與進程相關聯的全部數據(包括變量,內存,緩衝區)
  • 程序上下文(程序計數器PC,保存程序執行的位置)
  • 二、exec是一個函數簇,由6個函數組成,分別是以excl和execv打頭的。

    執行exec系統調用,一般都是這樣,用fork()函數新建立一個進程,然後讓進程去執行exec調用。我們知道,在fork()建立新進程之後,父進各與子進程共享代碼段,但數據空間是分開的,但父進程會把自己數據空間的內容copy到子進程中去,還有上下文也會copy到子進程中去。而爲了提高效率,採用一種寫時copy的策略,即創建子進程的時候,並不copy父進程的地址空間,父子進程擁有共同的地址空間,只有當子進程需要寫入數據時(如向緩衝區寫入數據),這時候會複製地址空間,複製緩衝區到子進程中去。從而父子進程擁有獨立的地址空間。而對於fork()之後執行exec後,這種策略能夠很好的提高效率,如果一開始就copy,那麼exec之後,子進程的數據會被放棄,被新的進程所代替。

    以上就是Linux exec命令手冊的詳細內容,更多請關注本站其它相關文章!

    更新時間

    發表留言

    請注意,留言須先通過審核才能發佈。