exec 命令


  • source

source命令即點(.)命令。

在bash下輸入man source,找到source命令解釋處,可以看到解釋”Read and execute commands from filename in the current shell environment and …”。從中可以知道,source命令是在當前進程中執行參數文件中的各個命令,而不是另起子進程(或sub-shell)。

  • exec

在bash下輸入man exec,找到exec命令解釋處,可以看到有”No new process is created.”這樣的解釋,這就是說exec命令不產生新的子進程。那么exec與source的區別是什么呢?

exec命令在執行時會把當前的shell process關閉,然后換到后面的命令繼續執行。

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

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

  1. 一個可以執行的程序
  2. 與進程相關聯的全部數據(包括變量,內存,緩沖區)
  3. 程序上下文(程序計數器PC,保存程序執行的位置)

 

I/O重定向

默認情況下始終有3個"文件"處於打開狀態, stdin(鍵盤), stdout(屏幕), 和stderr(錯誤消息輸出到屏幕上). 這3個文件和其他打開的文件都可以被重定向. 對於重定向簡單的解釋就是捕捉一個文件, 命令, 程序, 腳本, 或者是腳本中的代碼塊的輸出, 然后將這些輸出作為輸入發送到另一個文件, 命令, 程序, 或腳本中.

每個打開的文件都會被分配一個文件描述符. [1] stdin, stdout, 和stderr的文件描述符分別是0, 1, 和 2. 除了這3個文件, 對於其他那些需要打開的文件, 保留了文件描述符3到9. 在某些情況下, 將這些額外的文件描述符分配給stdin, stdout, 或stderr作為臨時的副本鏈接是非常有用的. [2] 在經過復雜的重定向和刷新之后需要把它們恢復成正常狀態

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM