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(constchar *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的程...