linux下進程間通信的幾種主要手段簡介:
- 管道(Pipe)及有名管道(named pipe):管道可用于具有親緣關系進程間的通信赞庶,有名管道克服了管道沒有名字的限制冤寿,因此中跌,除具有管道所具有的功能外筋讨,它還允許無親緣關系進程間的通信;
- 信號(Signal):信號是比較復雜的通信方式派任,用于通知接受進程有某種事件發(fā)生,除了用于進程間通信外璧南,進程還可以發(fā)送信號給進程本身掌逛;linux除了支持Unix早期信號語義函數sigal外,還支持語義符合Posix.1標準的信號函數sigaction(實際上司倚,該函數是基于BSD的豆混,BSD為了實現可靠信號機制,又能夠統(tǒng)一對外接口动知,用sigaction函數重新實現了signal函數)皿伺;
- 報文(Message)隊列(消息隊列):消息隊列是消息的鏈接表,包括Posix消息隊列system V消息隊列盒粮。有足夠權限的進程可以向隊列中添加消息鸵鸥,被賦予讀權限的進程則可以讀走隊列中的消息。消息隊列克服了信號承載信息量少丹皱,管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點妒穴。
- 共享內存:使得多個進程可以訪問同一塊內存空間,是最快的可用IPC形式摊崭。是針對其他通信機制運行效率較低而設計的讼油。往往與其它通信機制,如信號量結合使用呢簸,來達到進程間的同步及互斥矮台。
- 信號量(semaphore):主要作為進程間以及同一進程不同線程之間的同步手段乏屯。
- 套接口(Socket):更為一般的進程間通信機制,可用于不同機器之間的進程間通信瘦赫。起初是由Unix系統(tǒng)的BSD分支開發(fā)出來的辰晕,但現在一般可以移植到其它類Unix系統(tǒng)上:Linux和System V的變種都支持套接字。