1. 程式人生 > >進程間通信(IPC)

進程間通信(IPC)

進程問題

進程間通信(IPC)


功能:進程間傳輸數據

原因:在整個操作系統中,進程運行占據內存的內存空間,其它進程是拒絕訪問的


通信目的:

(1)數據傳輸 例:ftp的上傳、下載

(2)共享數據

(3)資源共享 與數據共享的區別:除了能共享數據,還包括硬件共享

(4)通知事件 例:windows中發生錯誤時,彈出窗口是否發生錯誤報告

(5)進程控制 例:CPU中各個進程允許,系統出現問題,CPU將當前進程停止,來運行系統進程 (發生事件緊急運行系統程序)


通信手段

(1)信號

功能:給某一個進程加上了一個信號指示,即加了一個標記,CPU會根據進程上的標記做出相應的處理

例:kill這個命令用來給進程發送信號的

kill -l 查看所有的信號類型

kill -9 PID 強制殺死進程

kill -3 PID 提取內存空間的數據(制作線程快照)


(2)管道

功能:將前面命令的輸出當做後面命令的輸入來用

例:cat /etc/passwd | wc -l

一個進程在管道中存儲一份數據由另一個進程來提取

管道提供了簡單的流控制機制

采用先進先出的思想(FIFO)即先存的先提取,後存的後提取

管道是一次完整的寫讀操作,必須先寫入再讀取,提取完數據之後馬上清理空間


[進程阻塞]

發生進程阻塞的兩種情況

(1)一次操作不完整 例:cat /etc/passwd I 只有寫入沒有讀取


(2)沒有按照既定的順序執行 例:管道未寫入先讀取


(3)消息隊列

在內存中開辟一塊空間,這塊空間專門用來記錄進程的狀態,由進程自己來寫入

例:兩個進程運行需要訪問同一份數據,兩個進程不能同時對同一份數據進行寫操作,

前進程將自己的運行狀態寫入到消息隊列,後進程等待前進程的狀態顯示完成再進行。


(4)共享內存

功能類似於管道,用於多進程之間進行數據的共享,在內存中開辟一塊空間,存放共享數據

特點:提供了區域編號,能夠讓不同的進程訪問不同的數據,共享數據可以多次訪問不清除


(5)信號量

實現進程中不同線程間的通信,幫助協調線程間的通信


(6)socket(套接字)收集 (ip port 協議) 進行引導通信連接

功能:實現網絡服務進程間的通信


進程運行過程中的故障:

(1)內存溢出:軟件的開發故障

開發人員沒有做好預判,在寫代碼時,規定了數據的最大值,存儲時受到了最大值限制,運行中使用空間超過了最大值,這種情況稱為內存的溢出


(2)僵屍進程:

進程阻塞

父進程或子進程,由於一方不正常退出,造成其中一方不停止也不運行,即占著內存空間不放,不釋放內存空間


(4)內存泄漏:軟件開發的故障

進程運行起來占據內存空間,將進程停止,內存空間不釋放,第二次運行再占據新的內存空間不釋放,以此類推,直到將內存空間占滿


進程間通信(IPC)