1. 程式—程序—程序id—pit_t型別。
2. get pid();取得程序idgetppid();取得父程序id。
a) getuid();geteuid(); getgid(); getegid(); 取得使用者id及組id。
3. fork函式建立新的程序。 pid_tfork(void);
a) fork函式不需要引數。
b) 對於父程序fork函式返回建立子程序pid號。
c) 對於子程序fork函式返回0, 系統0號程序為核心程序,以示區別。
d) 若建立子程序錯誤,則fork函式返回-1。
e) 建立子程序複製父程序程序空間,包括資料段和堆疊段。共享**段。
4. vfork函式建立共享父程序空間的子程序,且子程序一定比父程序先執行。
5. 不要在任何函式呼叫中使用vfork函式,避免函式棧幀空間的多次返回。
6. void exit(int);函式會深入核心登出掉程序的核心資料結構。並且釋放程序的資源。
a) exit函式的引數表示退出的狀態。
7. exit函式為封裝了linux系統呼叫_exit函式,exit函式在使用者空間做善後工作如清理使用者i/o緩衝區,將內容寫入磁碟等。以後進入核心釋放使用者程序的位址空間。
8. 除錯多程序:
a) 設定跟蹤流: set follow-fork-mode [parent|child]跟蹤流選項。
b) set detach-on-fork [on|off] set指定的程序將被除錯,另乙個程序將被停止。
c) attach命令:沒看懂!待查資料。
9. exec搜尋檔案系統中的檔案,並將內容複製到exec函式的位址空間,取代原程序的內容。實現講磁碟中的程式載入到記憶體中。exec幾乎不改變程序的身份屬性。
a) execl(); execle();execv(); execve(); execlp(); execvp();
10. exech函式執行直譯器檔案(如shell指令碼)時,直譯器檔案中命令列引數在前,exec函式傳遞給新程式的命令列在後。
11. 使用system函式呼叫shell命令。
a) int system(const char *cmdstring);
b) system的返回狀態。
c) system實現過程中呼叫fork及exec執行效率偏低,但是函式新增了出錯處理,訊號處理,及wait函式避免出現殭屍程序。
12. wait函式等待子程序的退出,並獲得起退出的狀態資訊,但只能等待乙個結束的程序。
13. waitpid函式等待乙個指定的程序結束。且可以不阻塞的等待乙個程序。
14. 當父程序呼叫fork()函式建立子程序,而不用wai函式取得子程序的結束狀態資訊時,殭屍程序會出現。殭屍程序放棄了幾乎所有系統資源包括程序空間,因而殭屍程序不能執行,雖然殭屍程序占用的記憶體微乎其微且不能被cpu呼叫,但是殭屍程序一直存在在系統中知道父程序取得結束狀態資訊。 linux有嚴格的程序數目限制,如果殭屍程序達到一定數目是,系統中將不能產生新的程序。
15. linux中 init程序領養所有的孤兒程序,會永遠呼叫wait函式避免產生殭屍程序。
16. wait3和wait4函式輸出錯誤的統計資訊。
Linux c 程序控制
getpid獲得程序識別碼 表頭檔案 include函式原型 pid t getpid void 返回值 目前程序的程序識別碼 getppid獲得父程序的程序識別碼 表頭檔案 include函式原型 pid t getppid void 返回值 目前程序的父程序識別碼 fork建立子程序 表頭檔案 ...
linux c程式設計 程序控制 四 程序關係
每乙個程序除了有乙個程序id外,還屬於乙個程序組。程序組是乙個或多個程序的集合,通常情況下,他們是在同一作業中結合起來的,同一程序組的個程序接受來自同一終端的各種訊號。每乙個程序組有乙個唯一的程序id。函式getpgrp 返 用程序的程序組id。include pid t getpgrp void ...
LInux C程序控制作業 2
編寫程式實現以下功能 1,在父程序中定義變數n,在子程序中對變數n進行 操作 並且列印變數n的值,列印子程序pid 2,在父程序中列印變數n的值,並且列印父程序pid。3,要求分別用fork和vfork建立子程序。vfork include include include include inclu...