Shell中fork source exec的區別

2021-09-20 22:05:43 字數 572 閱讀 8415

fork是linux的系統呼叫,用來建立子程序,子程序是父程序的乙個副本,從父程序那裡獲得一定的資源分配以及繼承父程序的環境。子程序與父程序唯一不同的地方在於pid(process id)。環境變數(傳給子程序的變數,遺傳性是本地變數和環境變數的根本區別)只能單向從父程序傳給子程序。不管子程序的環境變數如何變化,都不會影響父程序的環境變數。預設shell中的命令都是此種方式,建立sub-shell,然後執行。執行完後,返回父shell。

exec和source都屬於bash內建命令,執行source和exec的過程中都不會產生新的程序,被呼叫的指令碼與父指令碼在同乙個shell程序內執行。source和exec的區別在於exec呼叫乙個新指令碼以後, 父指令碼中exec行之後的內容就不會再執行了。所以被呼叫的指令碼中宣告的變數和環境變數,都可以在主指令碼中得到和使用

總結:source命令: 不建立子程序,在當前shell程序中執行指令碼,

exec命令:  不建立子程序, 在當前shell程序中執行指令碼, 父指令碼中exec行之後的內容不會執行

fork屬於系統呼叫, 會建立乙個子程序, 父程序會阻塞等待子程序執行結束, 然後繼續往下執行

shell指令碼中的函式, shell中的陣列

示例1 bin bash 函式的使用 input input 1 a b root second fun.sh 1 a 3 fun.sh 示例2 bin bash 傳遞乙個引數給函式 input read p please input n input root second fun.sh pleas...

shell中豎線的作用 Shell中符號意義

末端 end of line 這個常用在 grep sed awk 以及 vim vi 當中。變數的正規表示式 bash 對 定義了不少用法。見本文後部 引用script 的執行引用變數 引用引數的演算法與一般指令相同,指令本身為0,其後為1,然後依此類推。引用變數的代表方式如下 0,1,2,3,4...

shell中的if語法

字串測試 兩個字串相等 兩個字串不相等 z 空串 n 非空串 示例 z shell 數值測試 eq 數值相等 equal to ne 數值不相等 gt 第乙個數大於第二個數 lt 第乙個數小於第二個數 le 第乙個數小於等於第二個數 ge 第乙個數大於等於第二個數 示例 10 eq 12 與其他語言...