1. 程式人生 > >linux多程序和多執行緒

linux多程序和多執行緒

轉載自CodeUniverse的部落格

程序可執行程式是儲存在磁碟裝置上的由程式碼和資料按某種格式組織的靜態實體,而程序是可被排程的程式碼的動態執行

在Linux系統中,每個程序都有各自的生命週期。在一個程序的生命週期中,都有各自的執行環境以及所需的資源,這些資訊都記錄在各自的程序控制塊中,以便系統對這些程序進行有效的管理,程序控制塊的結構如下圖所示:

每個程序都有各自獨立的虛擬地址空間,空間的大小與所基於的硬體體系結構有關。

虛擬空間中各區代表的意義,如:

程式碼段:儲存指令序列和只讀資料,多個程序例項可共享程式碼段。

資料段:用來存放全域性變數和靜態變數。

堆區域:用於程式的動態記憶體管理,new或者malloc申請的記憶體就位於堆中。

棧:用來存放程序執行過程中的區域性變數,函式返回地址,引數和程序上下文環境。

執行緒:引入程序是為了解決程式併發執行的問題,而引入執行緒是為了減少程式併發所帶來的時間和空間的開銷;執行緒是比程序更小的單位,一個程序至少有一個執行緒,執行緒是作業系統進行排程的基本單位,執行緒基本上不佔用系統資源,執行緒與其他同屬一個程序的執行緒共享該程序所佔有的資源。

應用程式設計介面

程序環境 

getuid   獲得當前程序實際使用者ID

geteuid   獲得當前程序有效使用者ID

getgid        獲得當前程序實際使用者組ID 

getegid      獲得當前程序有效使用者組ID

getpid  獲得當前程序ID

getppid   獲得父程序ID

getpgrp     獲得程序組ID

setpgid      設定程序組

getsid   獲得程序會話ID

setsid        設定程序會話ID

getenv       獲取環境表量

putenv  設定環境表量

程序地址空間

malloc   申請記憶體

free        釋放記憶體

brk      設定堆區域大小

程序的建立與終止

fork  建立子程序 

exit        終止程序

atexit     註冊終止處理程式

載入可執行二進位制映像

exec

程序的同步控制

wait    暫停執行直到一個子程序結束

waitpid   等待指定子程序結束

執行緒

1. pthread_equal      //判斷執行緒是否相同
2. pthread_self         //返回呼叫執行緒的ID
3. pthread_create       //建立執行緒
4. pthread_exit      //退出執行緒
5. pthread_join        //啟動執行緒
6. pthread_cancel      //取消執行緒
7. pthread_cleanup_push  //執行緒清理