int main()先在父程序中建立管道,然後建立子程序,子程序複製了父程序管道檔案的檔案描述符,所以父程序和子程序各具有2個管道描述符,當在子程序中關閉讀端, 這時關閉的是子程序中管道檔案的讀端,而父程序的讀端沒有關閉,這時子程序往寫段寫資料的時候,因管道讀端未完全關閉,所以父程序不會收到sigpipe的訊號。else
return 0;
}
列印結果為
child: n = 10
father: status = 0
把子程序中的注釋while開啟,執行程式後觀察程序中檔案開啟和關閉的詳細資訊
父程序 0 1 2 3 4
子程序 0 1 2 4
int main()先在父程序中建立管道,然後建立子程序,然後關閉讀端, 這時,父子程序的讀端都關閉了,在子程序中往管道裡寫資料,列印結果如下else
return 0;
}
father: status = 13
證明子程序是由訊號13(sigpipe)關閉的
把注釋的while去掉,檢視程序的詳細資訊
父程序 0 1 2 4
子程序 0 1 2 4
int main()else
return 0;
}
先在父程序中建立管道,然後建立子程序,子程序複製了父程序管道檔案的檔案描述符,所以父程序和子程序各具有2個管道描述符,當在子程序中關閉讀端, 這時關閉的是子程序中管道檔案的讀端,而父程序的讀端沒有關閉,
這時子程序往寫段寫資料的時候,因管道讀端未完全關閉,所以父程序不會收到sigpipe的訊號。
列印結果為
child: n = 10
father: status = 0
把子程序中的注釋while開啟,執行程式後觀察程序中檔案開啟和關閉的詳細資訊
父程序 0 1 2 3 4
子程序 0 1 2 4
int main()子程序和父程序把讀端都關閉了, 所以列印結果else
return 0;
}
father: status = 13
若把sleep(2)的注釋去掉,延遲父程序讀端的關閉,列印結果則為
child: n = 10
father: status = 0
子程序與父程序的簡單應用
示例 在單核處理器裡,絕對的多程序是不存在的,那為什麼大家說也有多程序的存在,單核處理器的多程序實際上使用時間分配的概念做的,如果有同時有幾個程式要跑,那麼處理器就去分配一下。不是絕對的,大家一起執行,多核處理器的程序一般是絕對的,就是大家一起跑。同時進行。為什麼要有用多程序,使用多程序能更好的提高...
子程序父程序檔案共享
父子程序全域性變數不共享 寫時複製,讀時共享 檔案父子共享,而且關閉時父子程序都要close fd 我的理解是 雖然fork前的 只執行一次,但是建立子程序時複製使用者空間,此時檔案的狀態一同複製了 驗證父子程序,檔案共享 int main int argc,char ar else if pid ...
SIGCHLD訊號與父程序非同步等待子程序
阻塞式等待 函式,當然waitpid函式當其第三個引數不為 時也是阻塞式等待。非阻塞式等待 輪詢的方式 當waitpid函式當其第三個引數為 是非阻塞式等待。父程序可以阻塞等待子程序結束,也可以非阻塞地查詢是否有子程序結束等待清理 也就是輪詢的方式 若採用阻塞等待方式,父程序就不能處理自己的工作了 ...