1. 程式人生 > >Linux Shell基本工作原理

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( )等待,立即發提示符,讓使用者輸入下一個命令,轉⑴。如果命令末尾沒有&

號,則終端程序要一直等待,當子程序(即執行命令的程序)完成處理後終止,向父程序(終端程序)報告,此時終端程序醒來,在做必要的判別等工作後,終端程序發提示符,讓使用者輸入新的命令,重複上述處理過程。