2

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

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

4

2 回答 2

2

管道

在生产者-消费者场景中,您可以使用管道,它是 IPC。管道就是顾名思义,它将接收器和源连接在一起。在他的 shell 中,源是标准输出,而接收器是标准输入,所以 cmd1 | cmd2 只是将 cmd1 的输出连接到 cmd2 的输入。

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

其他工控机

IPC 多种多样:管道(在内存中)、命名管道(通过文件)、套接字、共享内存、信号量、消息队列、信号等。它们都有优缺点。网上和书籍中有很多关于它们的文献。在这里描述它们是很困难的。

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

于 2012-05-21T10:55:42.413 回答
1

如果其中一个进程是生产者,另一个是消费者,那么您可以进行共享内存通信。为此,您需要一个信号量。一个进程将锁定信号量然后写入共享内存,另一个进程将锁定信号量并读取值。由于您使用信号量,因此会注意脏读/写。

于 2012-05-16T08:56:02.967 回答