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

这个问题是为了独立的语言和连接方法。 其实find方法就是问题。 我知道我可以通过像prog1 | prog2这样的调用来直接pipe理两个进程 prog1 | prog2在shell中,我已经读了一些关于RPC和套接字的内容。 但是,一切都太抽象了,不能真正掌握它。 例如,我不清楚如何创build套接字,如果每个进程需要创build一个套接字,或者如果许多进程可以使用相同的套接字将消息传递给对方,或者如果我可以完全摆脱套接字。

有人可以解释一下Linux中的进程间通信是如何工作的吗?

在生产者 – 消费者场景中,你可以使用管道,这是一个IPC。 管子就是这个名字的意思,它把水槽和水源连接起来。 在shell中source是标准输出和sink的标准输入,所以cmd1 | cmd2只是将cmd1的输出连接到cmd2的输入。

使用管道,它会创建两个文件描述符。 你可以使用一个接收器和另一个来源。 一旦管道被创建,你的fork和一个进程使用一个文件描述符,而另一个使用另一个。

其他IPC

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

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

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