進程線程html
1.進程:數組
孤兒進程,守護進程,殭屍進程緩存
函數:fork ,wait,waitpid,網絡
進程間通信(IPC):多線程
1. 種類:無名管道,有名管道,信號通信 併發
消息隊列,共享內存,信號量燈 異步
socketsocket
2.目的:實現數據共享函數
3. 測試
無名管道:內核在物理空間開闢的一段共享緩存,無文件名只用於親緣之間;
函數:int pipe( int pipefd[2] ) :數組存放讀寫文件描述符
特色:
代碼示例:http://www.javashuo.com/article/p-xvojjtwl-hg.html
有名管道:內核在物理空間開闢的一段共享緩存,已文件形式操做緩存;
函數:int mkfifo(const char *pathname, mode_t mode) 建立只須要一個進程,另外一個進程直接讀寫
特色:
代碼示例:http://www.javashuo.com/article/p-btultepa-hh.html
信號通信:
信號處理方式:默認,自定義,忽略
特色:惟一異步通訊的IPC
消息隊列:內核在物理空間建立用於存放消息的雙向循環鏈表;
函數:msgget :建立獲取標識符
msgsend :經過標識符發送編號內容
msgrcv :經過標識符接收編號內容
msgctl :經過標識符刪除消息隊列
特色:
代碼示例:http://www.javashuo.com/article/p-sgfadpax-hm.html
共享內存:內核在物理空間開闢一大段緩存空間,直接使用地址共享讀寫,實現通訊;
函數:shmget :建立獲取共享內存
shmat : 掛載(映射創建)
shmdt : 卸載(映射取消)
shmctl :刪除共享內存
特色:
代碼示例:http://www.javashuo.com/article/p-gpthaggc-hn.html
信號量燈:多進程線程共享操做,經過加鎖機制資源保護,實現同步與互斥,防止干擾;
函數:semget :建立獲取信號量集合
semctl :設置初始值
semop : P V 操做
semctl : 刪除信號量集合
特色:
代碼示例:http://www.javashuo.com/article/p-dxaqguza-ho.html
socket:
特色:
代碼示例:
2.線程:輕量級進程,CPU調度的最小單位
函數:pthread_creat 註冊線程函數,實現併發運行
pthread_dtach/self 線程分離,自動回收
pthread_cannel/exit 粗暴主動,終止線程
pthread_join 回收資源(阻塞等待次線程回收)
pthread_cleanup_push/pop 線程退出函數(壓棧彈棧必須成對)
鎖:
互斥鎖初始化方式:靜態宏, 動態函數
1. 靜態宏的設置:
快速靜態鎖:普通鎖,在嵌套鎖時會出現死鎖
pthread_mutex_t fastmutex = PTHREAD_MUTEX_INITIALIZER
遞歸鎖:能夠嵌套上鎖
pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
檢錯鎖:在出現嵌套鎖時返回一個錯誤信息,不會死鎖
pthread_mutex_t errchkmutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP
2. 動態函數設置:
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)
參一爲初始化的鎖名稱
參二爲鎖的屬性,對應快速鎖,嵌套鎖,檢錯鎖。
鎖的操做:加鎖、解鎖、測試加鎖、銷燬鎖
1.加鎖:無論是哪一種類型的鎖,都不可能被兩個線程
int pthread_mutex_lock(pthread_mutex_t *mutex)
2.解鎖:對於快速鎖,則解除鎖定。對於嵌套鎖使鎖上的技術減一,表示上了兩層。
對於檢錯鎖,若是鎖是本線程加的,則解除鎖,不然啥也不幹
int pthread_mutex_unlock(pthread_mutex_t *mutex)
3.測試:使用測試加鎖,則不會掛起阻塞。
int pthread_mutex_trylock(pthread_mutex_t *mutex)
4.銷燬: 銷燬鎖,意味着釋放所佔用的資源,並且要求鎖處於開放狀態。
int pthread_mutex_destroy(pthread_mutex_t *mutex)
特色:
代碼示例:http://www.javashuo.com/article/p-xnuktoss-hp.html
<筆記>
1.進程內部多線程通信實現數據共享,使用全局變量便可,開銷小
2.
命令:
top:Linux的任務管理器·
PS :靜態的進程統計信息
a:顯示當前終端下的全部進程信息,包括其餘用戶的進程。 u:使用以用戶爲主的格式輸出進程信息。 x:顯示當前用戶在全部終端下的進程。 -e:顯示系統內的全部進程信息。 -l:使用長(long)格式顯示進程信息。 -f:使用完整的(full)格式顯示進程信息。
ps aux (簡單列表的形式顯示出進程信息):
USER :進程用戶名 PID :進程的ID PPID :父進程ID %CPU :進程佔用的CPU百分比 %MEM :進程佔用內存的百分比 NI :進程的NICE值,數值大,表示較少佔用CPU時間; VSZ :進程使用的虛擬內存量(KB); RSS :進程佔用的固定內存量(KB)(駐留中頁的數量); TTY :進程在哪一個終端上運行(登陸者的終端位置),若與終端無關,顯示(?)。若pts/0,表示網絡鏈接主機進程 WCHAN: 當前進程程是否正在運行,若爲-表示正在運行; START :進程被觸發啓動時間; TIME : 進程實際使用CPU運行的時間; COMMAND:命令的名稱和參數;
STAT:
D 沒法中斷的休眠狀態(一般 IO 的進程);
R 正在運行可中在隊列中可過行的;
S 處於休眠狀態;
T 中止或被追蹤;
W 進入內存交換 (從內核2.6開始無效);
X 死掉的進程 (基本不多見);
Z 殭屍進程;
< 優先級高的進程
N 優先級較低的進程
L 有些頁被鎖進內存;
s 進程的領導者(在它之下有子進程);
l 多進程的(使用 CLONE_THREAD, 相似 NPTL pthreads);
+ 位於後臺的進程組;
進程有5種狀態:
1. 運行(正在運行或在運行隊列中等待)
2. 中斷(休眠中, 受阻, 在等待某個條件的造成或接受到信號)
3. 不可中斷(收到信號不喚醒和不可運行, 進程必須等待直到有中斷髮生)
4. 僵死(進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放)
5. 中止(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後中止運行運行)
kill 進程號(殺死進程) kill -9 pid 強制終止進程
kill -l :(Linux信號列表)
1 ~ 31的信號爲傳統UNIX支持的信號,是不可靠信號(非實時的)
32 ~ 63的信號是後來擴充的,稱作可靠信號(實時信號)
區別:不可靠信號不支持排隊,可能會形成信號丟失
而可靠信號支持排隊,不會形成信號丟失
消息隊列 / 共享內存 / 信號量:
查看 :ipcs -q / -m / -s 刪除:ipcrm -q / -m / -s [-mid]
key:key shmid:編號 owner:建立用戶 perms:權限 bytes:大小 nattch:鏈接共享內存的進程數
status:共享內存的狀態
<筆記>
1. 程序運行在磁盤,不佔系統資源
進程運行在內存,佔用系統資源
2. fork以前的代碼,父子進程都擁有
3. 進程就是主線程
4. 管道是半雙工通訊
5. 進程線程應用:
多進程:執行新程序
多線程:執行多任務
6. wait 和 waitpid 區別 :
7.