筆者將《unix環境高級編程》主要內容總結爲三篇:文件篇,進程篇,高級io和進程間通訊三大板塊。本文是unix環境高級編程系列文章第二篇:進程篇。該篇主要包括:node
介紹進程相關的基本概念和使用環境:進程執行前的準備工做,進程如何終止,進程執行相關的環境變量表,進程執行時的內存空間佈局,內存如何分配linux
主要介紹進程控制符,進程如何建立,如何執行,如何終止,等待終止ios
主要介紹進程之間的關係,包括:進程組,會話,控制終端。以及unix底層的數據結構如何創建他們之間的關係算法
主要介紹信號的概念,如何設置信號處理函數,收到信號致使系統中斷的調用以及能自動重啓的調用。而後介紹如何發送信號,如何屏蔽信號,以及致使的信號阻塞shell
主要介紹線程的概念,線程標識符,線程如何建立,如何終止,等待終止狀態,設置自定義清理程序。而後對比了進程和線程相關概念和接口的對比。最後介紹線程的同步,包括:互斥量,讀寫鎖,條件變量編程
主要介紹線程屬性,同步屬性:互斥量屬性,讀寫鎖屬性,條件變量屬性。而後介紹如何建立線程私有數據。最後介紹信號和fork對線程的影響數組
主要說明守護進程的特徵,常見的系統守護進程,以及守護進程的編程規則。而後介紹處理守護進程的通用日誌架構,最後介紹守護進程的一些慣例緩存
進程執行從main函數開始,在這以前須要一些準備工做安全
每一個程序都會接收到一張環境表。環境表是一個字符指針數組,每一個指針包含一個以null結束的c字符串地址。全局變量environ表示該地址 bash
c程序由下面幾部分組成:
正文段:cpu執行的機器指令部分。正文段有可被共享,只讀的特性。
數據段(初始化數據段):包含程序中明確賦初始值的變量
非初始化數據段(bss段):函數外申明的未初始化數據
棧:局部變量,函數調用所需信息。每次調用時的返回地址等信息都存放在棧。棧從高地址向低地址方向增加
堆:動態存儲分配。位於非初始化數據段和棧之間
使用size命令能夠查看各個部分的大小
分配器出錯難於追蹤,不少替代的分配器在分配或釋放時,會進行附加的操做,以便追蹤問題
功能相似與fork,區別以下:
前面介紹了終止進程的8中狀況。無論哪一種方式,都有一些特性: