版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、高級(jí)編程筆試題答案一、 選擇題1. 在網(wǎng)絡(luò)字節(jié)序中,所謂”小端”(little endian)說(shuō)法正確的是( B )A. 高字節(jié)數(shù)據(jù)存放在低地址處,低字節(jié)數(shù)據(jù)存放在高地址處 B. 低字節(jié)位數(shù)據(jù)存放在內(nèi)存低地址處, 高字節(jié)位數(shù)據(jù)存放在內(nèi)存高地址處C. 和編譯器相關(guān) D. 上述答案都不正確2. C語(yǔ)言中,系統(tǒng)自動(dòng)打開(kāi)的文件是( D )A.二進(jìn)制文件B.隨機(jī)文件C.非緩沖文件D.設(shè)備文件3. TCP使用( B )進(jìn)行流量控制。A. 3次握手法B. 窗口控制機(jī)制C. 自動(dòng)重發(fā)機(jī)制D. 端口機(jī)制4. TCP/IP層IP協(xié)議的服務(wù)是( C )A. 可靠服務(wù)B. 有確認(rèn)的服務(wù) C. 無(wú)連接數(shù)據(jù)報(bào)D. 以上都
2、不對(duì)5. 對(duì)于一個(gè)沒(méi)有設(shè)置任何套接口選項(xiàng)的阻塞套接口,調(diào)用recv接收對(duì)方的數(shù)據(jù),對(duì)方發(fā)送數(shù)據(jù)前突然斷電,下列哪種情況將會(huì)發(fā)生( A )A. recv永遠(yuǎn)不會(huì)返回B. recv立刻返回-1C. recv立刻返回0D. recv在等待很長(zhǎng)一段時(shí)間后返回-16. 下列哪些關(guān)于套接口選項(xiàng)函數(shù)的說(shuō)法是正確的( C )A. SO_DONTLINGER選項(xiàng)是讓TCP套接口不對(duì)數(shù)據(jù)進(jìn)行緩存,調(diào)用send函數(shù)后立刻將數(shù)據(jù)發(fā)送出去;B.調(diào)用SO_RCVBUF和SO_SNDBUF調(diào)整TCP窗口的大?。籆. SO_REUSEADDR選項(xiàng)允許套接口綁定在一個(gè)已經(jīng)在使用的地址上;D. SO_MAX_MSG_SIZE選項(xiàng)
3、獲取每次調(diào)用TCP套接口send時(shí),所能發(fā)送的最大字節(jié)數(shù);二、 問(wèn)答題1. fork和vfork的區(qū)別?vfork用于創(chuàng)建一個(gè)新進(jìn)程,而該進(jìn)程的目的是exec一個(gè)新程序。vfork與fork一樣都創(chuàng)建一個(gè)子進(jìn)程,但他并不把父進(jìn)程地址空間完全復(fù)制到子進(jìn)程中,因?yàn)樽舆M(jìn)程通常都會(huì)調(diào)用exec或(_exit),于是也就不會(huì)訪問(wèn)該地址空間。vfork與fork的另一個(gè)區(qū)別是vfork保證子進(jìn)程先運(yùn)行,在它調(diào)用exec或_exit之后父進(jìn)程才可能被調(diào)度運(yùn)行。vfork使用如下例:#include #include #include #include int globvar=6;/*external var
4、iable in initialized data */intmain(void)int var; /* automatic variable on the stack */pid_t pid;var = 88;printf(before vforkn); /* we dont flush stdio */if (pid = vfork() 0),其中的a應(yīng)該定義為有符號(hào)類型還是無(wú)符號(hào)類型?無(wú)符號(hào)類型39. 怎么讓父進(jìn)程知道子進(jìn)程結(jié)束了?waitwaitpid40. 說(shuō)說(shuō)使用管道和共享內(nèi)存的整個(gè)過(guò)程?管道:a) 創(chuàng)建管道b) 讀寫(xiě)共享內(nèi)存:a) 獲取keyb) 獲取共享內(nèi)存c) 映射到虛擬地址
5、空間d) 讀寫(xiě)訪問(wèn)e) 解映射f) 刪除共享內(nèi)存41. 進(jìn)程關(guān)閉了,管道或者共享內(nèi)存還存在嗎,為什么?管道 不存在共享內(nèi)存 存在42. 僵尸進(jìn)程是什么?怎么形成的,哪些情況下會(huì)形成僵尸進(jìn)程?參考博客:基本概念孤兒進(jìn)程:一個(gè)父進(jìn)程退出,而它的一個(gè)或多個(gè)子進(jìn)程還在運(yùn)行,那么那些子進(jìn)程將成為孤兒進(jìn)程。孤兒進(jìn)程將被init進(jìn)程(進(jìn)程號(hào)為1)所收養(yǎng),并由init進(jìn)程對(duì)它們完成狀態(tài)收集工作。僵尸進(jìn)程:一個(gè)進(jìn)程使用fork創(chuàng)建子進(jìn)程,如果子進(jìn)程退出,而父進(jìn)程并沒(méi)有調(diào)用wait或waitpid獲取子進(jìn)程的狀態(tài)信息,那么子進(jìn)程的進(jìn)程描述符仍然保存在系統(tǒng)中。這種進(jìn)程稱之為僵死進(jìn)程。問(wèn)題及危害unix提供了一種機(jī)制
6、可以保證只要父進(jìn)程想知道子進(jìn)程結(jié)束時(shí)的狀態(tài)信息, 就可以得到。這種機(jī)制就是: 在每個(gè)進(jìn)程退出的時(shí)候,內(nèi)核釋放該進(jìn)程所有的資源,包括打開(kāi)的文件,占用的內(nèi)存等。 但是仍然為其保留一定的信息(包括進(jìn)程號(hào)the process ID,退出狀態(tài)the termination status of the process,運(yùn)行時(shí)間the amount of CPU time taken by the process等)。直到父進(jìn)程通過(guò)wait / waitpid來(lái)取時(shí)才釋放。 但這樣就導(dǎo)致了問(wèn)題,如果進(jìn)程不調(diào)用wait / waitpid的話, 那么保留的那段信息就不會(huì)釋放,其進(jìn)程號(hào)就會(huì)一直被占用,但是系統(tǒng)
7、所能使用的進(jìn)程號(hào)是有限的,如果大量的產(chǎn)生僵死進(jìn)程,將因?yàn)闆](méi)有可用的進(jìn)程號(hào)而導(dǎo)致系統(tǒng)不能產(chǎn)生新的進(jìn)程. 此即為僵尸進(jìn)程的危害,應(yīng)當(dāng)避免。孤兒進(jìn)程是沒(méi)有父進(jìn)程的進(jìn)程,孤兒進(jìn)程這個(gè)重任就落到了init進(jìn)程身上,init 進(jìn)程就好像是一個(gè)民政局,專門負(fù)責(zé)處理孤兒進(jìn)程的善后工作。每當(dāng)出現(xiàn)一個(gè)孤兒進(jìn)程的時(shí)候,內(nèi)核就把孤 兒進(jìn)程的父進(jìn)程設(shè)置為init,而init進(jìn)程會(huì)循環(huán)地wait()它的已經(jīng)退出的子進(jìn)程。這樣,當(dāng)一個(gè)孤兒進(jìn)程凄涼地結(jié)束了其生命周期的時(shí)候,init 進(jìn)程就會(huì)代表黨和政府出面處理它的一切善后工作。因此孤兒進(jìn)程并不會(huì)有什么危害。任何一個(gè)子進(jìn)程(init除外)在exit()之后,并非馬上就消失掉,
8、而是留下一個(gè)稱為僵尸進(jìn)程(Zombie)的數(shù)據(jù)結(jié)構(gòu),等待父進(jìn)程處理。這 是每個(gè) 子進(jìn)程在結(jié)束時(shí)都要經(jīng)過(guò)的階段。如果子進(jìn)程在exit()之后,父進(jìn)程沒(méi)有來(lái)得及處理,這時(shí)用ps命令就能看到子進(jìn)程的狀態(tài)是“Z”。如果父進(jìn)程能及時(shí) 處理,可能用ps命令就來(lái)不及看到子進(jìn)程的僵尸狀態(tài),但這并不等于子進(jìn)程不經(jīng)過(guò)僵尸狀態(tài)。 如果父進(jìn)程在子進(jìn)程結(jié)束之前退出,則子進(jìn)程將由init接管。init將會(huì)以父進(jìn)程的身份對(duì)僵尸狀態(tài)的子進(jìn)程進(jìn)行處理。僵尸進(jìn)程危害場(chǎng)景:例如有個(gè)進(jìn)程,它定期的產(chǎn) 生一個(gè)子進(jìn)程,這個(gè)子進(jìn)程需要做的事情很少,做完它該做的事情之后就退出了,因此這個(gè)子進(jìn)程的生命周期很短,但是,父進(jìn)程只管生成新的子進(jìn)程,
9、至于子進(jìn)程 退出之后的事情,則一概不聞不問(wèn),這樣,系統(tǒng)運(yùn)行上一段時(shí)間之后,系統(tǒng)中就會(huì)存在很多的僵死進(jìn)程,倘若用ps命令查看的話,就會(huì)看到很多狀態(tài)為Z的進(jìn)程。 嚴(yán)格地來(lái)說(shuō),僵死進(jìn)程并不是問(wèn)題的根源,罪魁禍?zhǔn)资钱a(chǎn)生出大量僵死進(jìn)程的那個(gè)父進(jìn)程。因此,當(dāng)我們尋求如何消滅系統(tǒng)中大量的僵死進(jìn)程時(shí),答案就是把產(chǎn)生大 量僵死進(jìn)程的那個(gè)元兇槍斃掉(也就是通過(guò)kill發(fā)送SIGTERM或者SIGKILL信號(hào)啦)。槍斃了元兇進(jìn)程之后,它產(chǎn)生的僵死進(jìn)程就變成了孤兒進(jìn) 程,這些孤兒進(jìn)程會(huì)被init進(jìn)程接管,init進(jìn)程會(huì)wait()這些孤兒進(jìn)程,釋放它們占用的系統(tǒng)進(jìn)程表中的資源,這樣,這些已經(jīng)僵死的孤兒進(jìn)程 就能瞑目而
10、去了。代碼孤兒進(jìn)程和僵尸進(jìn)程測(cè)試#include #include #include #include int main() pid_t pid; /創(chuàng)建一個(gè)進(jìn)程 pid = fork(); /創(chuàng)建失敗 if (pid 0) perror(fork error:); exit(1); /子進(jìn)程 if (pid = 0) printf(I am the child process.n); /輸出進(jìn)程ID和父進(jìn)程ID printf(pid: %dtppid:%dn,getpid(),getppid(); printf(I will sleep five seconds.n); /睡眠5s,保證父進(jìn)
11、程先退出 sleep(5); printf(pid: %dtppid:%dn,getpid(),getppid(); printf(child process is exited.n); /父進(jìn)程 else printf(I am father process.n); /父進(jìn)程睡眠1s,保證子進(jìn)程輸出進(jìn)程id sleep(1); printf(father process is exited.n); return 0;僵尸進(jìn)程測(cè)試#include #include #include #include int main() pid_t pid; pid = fork(); if (pid 0)
12、perror(fork error:); exit(1); else if (pid = 0) printf(I am child process.I am exiting.n); exit(0); printf(I am father process.I will sleep two secondsn); /等待子進(jìn)程先退出 sleep(2); /輸出進(jìn)程信息 system(ps -o pid,ppid,state,tty,command); printf(father process is exiting.n); return 0;多個(gè)僵尸進(jìn)程#include #include #incl
13、ude #include int main() pid_t pid; /循環(huán)創(chuàng)建子進(jìn)程 while(1) pid = fork(); if (pid 0) perror(fork error:); exit(1); else if (pid = 0) printf(I am a child process.nI am exiting.n); /子進(jìn)程退出,成為僵尸進(jìn)程 exit(0); else /父進(jìn)程休眠20s繼續(xù)創(chuàng)建子進(jìn)程 sleep(20); continue; return 0;43. 僵尸進(jìn)程解決辦法?(1)通過(guò)信號(hào)機(jī)制子進(jìn)程退出時(shí)向父進(jìn)程發(fā)送SIGCHILD信號(hào),父進(jìn)程處理SIG
14、CHILD信號(hào)。在信號(hào)處理函數(shù)中調(diào)用wait進(jìn)行處理僵尸進(jìn)程。測(cè)試程序如下所示:#include #include #include #include #include static void sig_child(int signo);int main() pid_t pid; /創(chuàng)建捕捉子進(jìn)程退出信號(hào) signal(SIGCHLD,sig_child); pid = fork(); if (pid 0) printf(child %d terminated.n, pid);(2)fork兩次Unix 環(huán)境高級(jí)編程8.6節(jié)說(shuō)的非常詳細(xì)。原理是將子進(jìn)程成為孤兒進(jìn)程,從而使的父進(jìn)程變?yōu)閕nit進(jìn)程,通過(guò)init進(jìn)程可以處理僵尸進(jìn)程。測(cè)試程序如下所示:#include #include #include #include int main() pi
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼寧石化職業(yè)技術(shù)學(xué)院《審計(jì)流程實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 昆明幼兒師范高等??茖W(xué)?!渡鐣?huì)科學(xué)名著》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西傳媒職業(yè)學(xué)院《機(jī)械制造技術(shù)基礎(chǔ)實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 吉林師范大學(xué)博達(dá)學(xué)院《課外讀寫(xiě)實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南商務(wù)職業(yè)技術(shù)學(xué)院《電子線路CAD設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南財(cái)政經(jīng)濟(jì)學(xué)院《中國(guó)民族民間舞(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 黑龍江三江美術(shù)職業(yè)學(xué)院《中文工具書(shū)》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶工業(yè)職業(yè)技術(shù)學(xué)院《經(jīng)濟(jì)地理學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江科技學(xué)院《材料綜合實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 年產(chǎn)2萬(wàn)噸鹽酸二甲雙胍原料藥項(xiàng)目可行性研究報(bào)告模板-立項(xiàng)備案
- 2023年中考語(yǔ)文備考之名著閱讀《經(jīng)典常談》思維導(dǎo)圖合集
- 2023年湘教版數(shù)學(xué)七年級(jí)下冊(cè)《整式的乘法》單元質(zhì)量檢測(cè)(含答案)
- 氣柜安裝工程施工方案
- GB/T 28750-2012節(jié)能量測(cè)量和驗(yàn)證技術(shù)通則
- GB/T 18791-2002電子和電氣陶瓷性能試驗(yàn)方法
- 分子生物學(xué)本基因組及基因組學(xué)概論
- 《人工智能》全冊(cè)配套課件
- 統(tǒng)編部編版四年級(jí)道德與法治下冊(cè)優(yōu)秀課件【全冊(cè)】
- 高職大?!扼w育與健康》課程標(biāo)準(zhǔn)
- 12月1日世界艾滋病日預(yù)防艾滋病講座PPT珍愛(ài)生命預(yù)防艾滋病PPT課件(帶內(nèi)容)
- 測(cè)量?jī)x器自檢記錄表(全站儀)
評(píng)論
0/150
提交評(píng)論