Linux C王者歸來 第十一章 程序控制

2021-07-11 12:21:19 字數 1621 閱讀 3685

1.程式可以有多個程序,乙個程序與程序id11 對應

2./proc中的數字對應id號,getpid和getppid可以獲得程序id父程序id

3.getuid geteuid 獲得程序使用者id和有效使用者id

4.getgid和getegid獲得程序的組id合有效組id

5.程序id和父程序id不會改變,啟動使用者和組適當條件改變

6.子程序用fork來建立,會與父程序共享資料段,同時會賦值資料段和堆疊。父程序fork返回子程序id,子程序返回0,二者地位平等啟動先後不定。

7.一般是「寫時複製」,子程序用到資料才會複製,

8.vfork會建立乙個程序,不過該程序與父程序共享資料段,堆疊,**,會影響父程序,而且一定比父程序先執行,不要再任何函式內部使用vfork

9.因為父程序和子程序從同一地點返回,子程序返回後,會影響父程序。

10.退出程序用exit(x),其會清理io緩衝,寫入磁碟,之後才釋放位址空間。

11.設定程序所有者,什麼用呢

setuid 改變實際使用者id和有效使用者id,根使用者可以,再就是,使用者id為程序實際使用者id

seteuid之概念有效使用者id

12.gdb 設定跟蹤流,set follow-fork-mode child/parent

set detach-on-fork [on/off]

gdb attach id

13.exec 不建立程序,只不過是把程式複製到 對應程序的資料段和**段

execl 有引數裂變,null結尾

execv 命令列引數以二維陣列形式提供

exece  以二維陣列重新整理環境變數

execp,程式名不完整,去path去找

exec會關閉開啟的目錄流,會改有效使用者組,有效使用者

13.在程式中執行shell,system,相當於fork,exec,waitpid

fork,waitpid 失敗,返回-1

exec失敗 exit127

成功,相當於$?

入參null,返回1

14.system 執行效率低,會呼叫兩次fork,和exec,第一次載入hslel,第二次引導程式

pid_t wait(int * statloc) ,wait阻塞程序,知道其子程序結束,取得結束資訊放入入參,返回結束的id

16.對程序結束資訊的判斷取值巨集,

正常結束:wifexited p319

17.等待制定程序

waitpid(pid_t pid,int * statloc,intoptions)

入參1:-1任意程序,》0,指定程序,0等待組id合pid想定的子程序,<-1等待組id定於pid絕度值的組內的任意程序,

0,-1有啥區別

18.引數3,wcotinued 不懂,暫停後又繼續執行,未報告,上報,wnohang,不阻塞,不結束直接返回,wuntraced,暫停了,為報告過,返回狀態

19.殭屍程序會一直存在,直到父程序得到其結束資訊,即wait,父程序必須呼叫wait防止殭屍程序,怎麼辦呢,影響實時性,——————所以怎麼處理。。。?

20.父程序先結束,孤兒程序,init程序專門呼叫wait,可以讓程序成為init的子程序,利用孫子程序解決上面的問題

21.程序資訊再說了。

第十一章 程序間通訊

1.管道的定義 當從乙個連線資料流到另乙個程序時,我們使用術語管道 pipe 對於shell命令來說,命令的連線是通過管道字元來完成的,如下所示 cmd1 cmd2 shell負責安排兩個命令的標準輸入和標準輸出。cmd1的標準輸入來自終端鍵盤。cmd1的標準輸出傳遞給cmd2,作為它的標準輸入。c...

modern c design 第十一章

本章介紹了經常遇到的雙分派的一種泛型解決方案。c 在語法上實現了單分派,即虛函式,通過動態機制選擇相應的函式。雙分派是形如fun object1 a,object2 b 根據a和b的實際型別動態自動分派乙個處理函式。最容易想到的方案,蠻幹法 寫一大堆過載函式.不過這種方法會有很強的依賴性。也提供了一...

第十一章3

第十一章 一 滾動元件 awt中的滾動元件包括scrollbar 滾動條 和滾動面板 scrollpane 兩種。1 滾動條scrollbar 在指定的取值範圍內快速選取某一值的功能。i.構造方法 public scrollbar int orientation,int value,int visi...