第8章程序控制總結

2022-09-17 06:30:09 字數 1325 閱讀 4682

1 父子程序的程式空間

子程序獲得父程序的資料空間、堆、棧的副本,即不共享這些空間

父子程序共享正文段

不過現在又很多實現採用cow寫時複製技術,即共享空間,發生修改時只為修改區域製作副本

2 檔案共享

父子程序各自維護程序表項(記錄有檔案描述符、檔案描述符標誌、檔案表指標)

父子程序共享檔案表(記錄當前檔案偏移量、檔案狀態標誌、v節點指標)

乙個檔案只有乙個v節點表

3 vfork

vfork建立的子程序目的是為了呼叫exec函式

在呼叫exec函式之前,父子程序共享程式空間(因為呼叫exec之後,子程序將訪問另外的程式空間,呼叫exec之前沒必要單獨為子程序複製父程序的程式空間)

vfork保證子程序先執行,直到子程序呼叫exec或exit函式後父程序才開始執行

4 wait

pid_t wait(int *status)

pid_t waitpid(pid_t pid,

int *status,int option)

wait函式等待所有子程序中的乙個程序終止,將終止狀態寫入status並返回子程序id

waitpid函式通過pid、option決定是否阻塞的方式等待某個子程序

對於wait獲取的子程序終止狀態,可以通過以下巨集來判斷:

wifexited(status)

wifsignaled(status)

wifstopped(status)

wifcontinued(status)

waitpid函式再新增乙個引數,用來獲取子程序的資源使用情況即為wait4函式:

pid_t wait4(pid_t pid,int *status,int option,strcut rusage *rusage)

wait3函式不指定子程序pid

5 exec函式

int execl(const

char *pathname,const

char *arg0,.../*

(char *)0 */)

int execv(const

char *pathname,char *const ar**)

execl和execv函式的pathname引數指定執行程式的路徑(絕對路徑、相對路徑、或直接是當前目錄下的檔名)

exelce和execve新增char *const env引數傳遞環境變數

execlp和execvp的第乙個引數如果不是路徑名,則在path的路徑下找執行檔案(如果是檔名只會在path下尋找,不會在當前目錄下尋找)

第8章 程序控制

pid t getppid void 返回值 呼叫程序的父程序id uid t getuid void 返回值 呼叫程序的實際使用者id uid t geteuid void 返回值 呼叫程序的有效使用者id gid t getgid void 返回值 呼叫程序的實際組id gid t getegi...

UNIX高階環境程式設計 第8章 程序控制

id為0的程序通常是排程程序 交換程序 屬於核心的一部分。id為1的程序是init程序,在自舉過程結束時由核心呼叫,該程序讀寫系統初始化檔案,將系統引導至乙個狀態 如多使用者 它是乙個普通使用者程序,但以超級使用者特權執行。函式宣告 include pid t fork 特性子程序的繼承特性正常終止...

第8章節 程序控制

1.每乙個程序都有唯一的乙個非負整數程序id 2.核心態 程序呼叫了系統api 注意不是標準庫函式 正在執行核心 的狀態 使用者態 正在執行的是使用者編寫的 狀態 3.核心自舉 自舉是指上電自檢,即核心檢查硬體平台都擁有什麼硬體,為硬體載入驅動,最終載入根文 件系統並執行第乙個程序。程序id 1的程...