Q8.1 在圖8-3程序中,若是用exit調用代替_exit調用,那麼可能使標準輸出關閉,是printff返回-1.修改該程序驗證在你所使用的系統上是否會產生此種結果。若是並不是如此,你怎麼處理才能獲得相似的結果呢?ide
Q8.2 回憶圖7-6中典型的存儲空間佈局,因爲對應於每一個函數調用的棧幀一般存儲在棧中,而且因爲調用vfork後,子進程運行在父進程的地址空間中,若是不是在main函數中而是在另外一個函數中調用vfork,此後子進程又從該函數返回,將會發生什麼?請編寫一段測試程序對此進行驗證,而且畫圖說明發生了什麼?函數
Q8.3 重寫圖8-6的程序,把wait 換成waitid,不調用pr_exit,而從siginfo結構中去頂等價的信息。佈局
Q8.4 當用 $./a.out 執行圖8-13中的程序一次是,其輸出是正確的,可是若將該程序按下列方式執行屢次,則輸出不正確。測試
$ ./a.out; a.out; ./a.out進程
output from parentit
ooutput from parentclass
ouotuptut from childtest
put from parentfile
output from child程序
utput from child
緣由是什麼?怎樣才能更在此類錯誤?若是使子進程首先輸出,還會發生此問題嗎?
Q8.5 在圖8-20所示的程序中,調用execl,制定pathname 爲解釋器文件,若是將其改成調用execlp,指定testinterp的filename,而且若是目錄/home/sar/bin是路徑前綴,則運行該程序時,argv[2]的打印輸出是什麼?
Q8.6 編寫一段程序建立一個僵死進程,而後調用system執行ps(1)命令以驗證該進程是僵死進程。
Q8.7 8.10節中說起POSIX.1要求在exec時關閉打開目錄流,按下列方式對此進行驗證:對跟目錄調用opendir,查看在你係統上實現的DIR結構,而後打印執行是關閉標誌。接着打開向同一目錄讀並打印執行是關閉標誌。