1. 程式人生 > >linux多進程和多線程

linux多進程和多線程

多線程 tgid sid 獲得 進程上下文 odi href eat getpgrp

轉載自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 //線程清理

linux多進程和多線程