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 //執行緒清理