在进程之间传递消息

我需要编写一个简单的函数,在linux中执行以下操作:

  • 创build两个进程
  • 让Process1中的thread1执行一些小操作,并在操作完成后通过thread2发送消息给Process2。 * Process2应确认收到的消息。

我不知道从哪里开始

  1. 我已经写了两个简单的函数,从0到1000在一个循环(循环运行在一个线程调用的函数),我已经编译它们来获取二进制文件。
  2. 我正在执行一个接一个(在后台运行)从一个shell脚本
  3. 一旦process1在循环中达到1000,我希望第一个进程发送一个“Complete”消息给另一个。

我不确定我的方法在stream程方面是否正确,我完全不知道如何沟通这两者。 任何帮助将不胜感激。

迷失在太空

你可能会想用这个管道。 根据进程的启动方式,您可能需要命名管道或匿名管道:

  • 如果进程彼此独立启动,则使用命名管道(也称为fifo, man mkfifo )。
  • 如果进程是由父进程通过分叉启动的,则使用匿名管道( man 2 pipe )。 父进程将创建管道,子进程将继承它们。 这可能是“最美丽”的解决方案。

在这两种情况下,管道的端点就像任何其他文件描述符一样使用(但更像套接字而不是文件)。

如果您还不熟悉管道,我建议您获得一份Marc Rochkind的“高级UNIX编程”一书,其中详细介绍了这些技术,并简单了解了示例代码。 这本书还介绍了其他进程间通信方法(在POSIX系统上唯一真正的其他有用的进程间通信方法是共享内存,但仅仅为了娱乐/完整性,他提出了一些黑客)。

既然你创建了进程(我假设你正在使用fork() ),你可能想看看eventfd()

eventfd()提供了一个轻量级的机制来将事件从一个进程或线程发送到另一个进程。 有关eventfd()的更多信息和一个小例子可以在这里找到http://man7.org/linux/man-pages/man2/eventfd.2.html

信号或命名管道(因为你分别开始两个进程)可能是如果你只是寻找一个简单的解决方案去这里的方式。 对于信号,您的客户端进程(发送“完成”的进程)需要知道服务器的进程ID,对于命名管道,他们都需要知道要通过的管道文件的位置。

不过,我想指出一个简洁的IPC /网络工具,如果你正在设计一个更大,更强大的系统,可以使你的工作更容易: 0MQ可以使这种客户端/服务器交互变得简单,并允许你以任何你喜欢的顺序启动程序(如果你正确地构建你的代码)。 我强烈推荐它。