Linux進程間通信(IPC)的幾種方式總結(jié)
概述:
進程間通信(IPC,Inter-Process Communication),指至少兩個進程或線程間傳送數(shù)據(jù)或信號的一些技術(shù)或方法。進程是計算機系統(tǒng)分配資源的最小單位(進程是分配資源最小的單位,而線程是調(diào)度的最小單位,線程共用進程資源)。每個進程都有自己的一部分獨立的系統(tǒng)資源,彼此是隔離的。為了能使不同的進程互相訪問資源并進行協(xié)調(diào)工作,才有了進程間通信。
主要方法:
管道:
分為兩種,
軟管道: 如 ps -ef | grep xxxx,
硬管道
消息隊列:
內(nèi)核創(chuàng)建一個消息隊列,操作系統(tǒng)中的多個進程都可以操作這個消息隊列.可以向其發(fā)送消息,也可從中接收消息.
共享內(nèi)存:
每個進程都有一個虛擬內(nèi)存地址和物理內(nèi)存地址的映射,一般兩個進程的映射的物理內(nèi)存地址是不同的,共享內(nèi)存即是將其映射的物理內(nèi)存地址變成一樣的.這樣兩個進程就可以訪問相同的物理內(nèi)存,也就可以實現(xiàn)進程之間的通信.
套接字:
非常常見,如通過3306端口訪問某個遠程mysql服務(wù), 我訪問mysql的這個進程,和遠程的這個mysql服務(wù)的進程之間的通信,就是通過3306端口創(chuàng)建的TCP的套接字.
如果是訪問本機的mysql服務(wù),則不會走TCP套接字,而是走Linux底層的套接字
信號量:
類似一個計數(shù)器.控制多個進程對一個共享資源的訪問.
信號:
一個進程可以向另一個進程發(fā)送一個信號.通過kill -l
指令可以列出所有的信號
(64種死法...)
Linux中的信號 大多數(shù)作用是把一個進程殺死,于是叫kill了..
當(dāng)tail -f xxx文件
時,是會一直是阻塞. 如何結(jié)束? 一般會按ctrl+c
,
其實該命令就是當(dāng)前的shell($$
可以看到當(dāng)前shell的pid),向tail -f
進程發(fā)送了一個信號,該信號值是2,即SIGINT
kill -9 pid
, 9號信號是SIGKILL.
如果不加,則默認15號信號SIGTERM
(即Terminal)
9號信號即kill信號是不能被捕捉的,必須強制停止. 其他信號可以在程序中捕捉到.
ctrl+c : SIGINT
kill不帶參數(shù): SIGTERM
KILL -9: SIGKILL
到此這篇關(guān)于Linux進程間通信(IPC)的幾種方式總結(jié)的文章就介紹到這了,更多相關(guān)Linux進程通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解CentOS7 安裝 MariaDB 10.2.4的方法
這篇文章主要介紹了CentOS7 安裝 MariaDB 10.2.4的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-11-11從Windows到Linux的三種文件傳輸實現(xiàn)方式
文章介紹了在跨平臺工作環(huán)境中將文件從Windows系統(tǒng)傳輸?shù)絃inux服務(wù)器的幾種方法,包括使用SCP命令、搭建Web服務(wù)和使用wget下載文件,每種方法都有其特點,如安全性、速度、易用性和適用場景等2024-12-12