如何在同一个Ubuntu机器上运行的独立进程相互通信?

时间:2012-05-16 08:23:33

标签: linux ipc inter-process-communicat

这个问题意味着语言和连接方法无关。实际上找到方法就是问题所在。 我知道我可以通过shell中的prog1 | prog2之类的调用直接管道两个进程,并且我已经阅读了有关RPC和套接字的内容。但是一切都有点过于抽象,无法真正掌握它。例如,我不清楚如何创建套接字以及每个进程是否需要创建套接字,或者许多进程可以使用相同的套接字来相互传递消息,或者是否可以完全摆脱套接字。

有人能解释一下Linux中的进程间通信是如何工作的以及我有哪些选择?

2 个答案:

答案 0 :(得分:2)

<强>管

在生产者 - 消费者场景中,您可以使用管道,它是IPC。管道就是名字所暗示的,它将水槽和水源连接在一起。在shell中,源是标准输出,接收器是标准输入,因此cmd1 | cmd2只是将cmd1的输出连接到cmd2的输入。

使用管道,它会创建两个文件描述符。您可以使用一个用于接收器,另一个用于源。创建管道后,fork和一个进程使用文件描述符中的一个进程,而另一个进程使用另一个进程。

其他IPC

IPC是各种各样的:管道(在内存中),命名管道(通过文件),套接字,共享内存,信号量,消息队列,信号等。所有都有pro和con。网上有很多关于他们的文章。在这里描述它们将是困难的。

基本上你必须明白每个进程都有自己的内存,与其他进程分开。因此,您需要找到用于交换数据的共享资源。资源可以是“物理的”,如网络(用于套接字)或大容量存储(用于文件)或“抽象”,如管道或信号。

答案 1 :(得分:1)

如果其中一个流程是生产者而其他流程是消费者,那么您可以进行共享内存通信。你需要一个信号量。一个进程将锁定信号量,然后写入共享内存,其他进程将锁定信号量并读取值。由于您使用信号量脏读/写将被处理。