进程通信的方式 :
①信号通信
②管道通信
③消息队列
④共享存储区
-
信号通信
信号是Linux进程之间一种重要的通信机制;
信号的作用是为了通知进程某个时间已经发生;
信号的发出是及时的,但是信号的响应可能会有延后,收到信号的进程在当前执行处设置断点,然后立即转为执行信号处理函数,执行结束后,会回到断点,继续执行之前的操作,这一点类似中断机制;
中断和信号的区别是,前者运行在核心态(系统),后者运行在用户态,中断的响应比较及时,而信号的相应一般会有延迟;
信号的发出者可以是进程、系统、硬件 -
管道通信
一个进程可以通过管道把数据传递给另外一个进程。前者向管道中写入数据,后者从管道中读出数据。
其工作原理如下: -
消息队列
信箱:
消息队列的难点在于,发送方不能直接将要发送的数据复制进接收方的存储区,这时就需要开辟一个共享存储区域,可供双方对这个存储区进行读写操作。这个共享区域就叫做信箱。每个信箱都有一个特殊的标识符。每个信箱都有自己特定的信箱容量、消息格式等。信箱被分为若干个分区,一个分区存放一条消息 -
共享存储区
共享存储区是指在内存中开辟一个公共存储区,把要进行通信的进程的虚地址空间映射到共享存储区。发送进程向共享存储区中写数据,接收进程从共享存储区中读数据
以上,详细可参考