Linux Shell基本工作原理
【吾閱吾評】:
------------------------------------------------------------------------------------
系統初啟後,核心為每個終端使用者建立一個程序去執行Shell解釋程式。它的執行過程基本上按如下步驟:
(1)讀取使用者由鍵盤輸入的命令列。
(2)分析命令,以命令名作為檔名,並將其它引數改造為系統呼叫execve( )內部處理所要求的形式。
execve()函式將執行一個程式。execve()用來執行引數filename字串所代表的檔案路徑,第二個引數系利用陣列指標來傳遞給執行檔案,最後一個引數則為傳遞給執行檔案的新環境變數陣列。 #include<unistd.h> int execve (const char *filename, const char *argv [], const char *envp[]); |
(3)終端程序呼叫fork( )建立一個當前程序的子程序。
#include<sys/types.h> /*包含了pid_t的定義*/ #include<unistd.h> /*包含系統呼叫fork的說明*/ unisigned int pid_t fork(void); |
(4)終端程序本身用系統呼叫wait4( )來等待子程序完成(如果是後臺命令,則不等待)。當子程序執行時呼叫execve( )
#include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> #include <sys/wait.h> pid_t wait4(pid_t pid, int *status, int options,struct rusage *rusage); |
(5)如果命令末尾有&號(後臺命令符號),則終端程序不用系統呼叫wait4( )等待,立即發提示符,讓使用者輸入下一個命令,轉⑴。如果命令末尾沒有&