進程間通信(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)