linux - 在进程之间传递消息

标签 linux multithreading process

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

  • 创建两个进程。
  • 让 Process1 中的线程 1 做一些小操作,并在操作完成后通过线程 2 向 Process2 发送消息。 *Process2 应确认收到的消息。

我不知道从哪里开始

  1. 我编写了两个简单的函数,它们在一个循环中简单地从 0 计数到 1000(该循环在一个线程调用的函数中运行),我编译了它们以获得二进制文件。
  2. 我正在通过 shell 脚本一个接一个地执行这些(都在后台运行)
  3. 一旦进程 1 在其循环中达到 1000,我希望第一个进程向另一个进程发送“完成”消息。

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

迷失空间

最佳答案

您可能希望为此使用管道。根据进程的启动方式,您需要命名管道或匿名管道:

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

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

如果您还不熟悉管道,我建议您阅读 Marc Rochkind 的书 “高级 UNIX 编程”,其中对这些技术进行了非常详细的解释,并且示例代码易于理解。那本书还介绍了其他进程间通信方法(POSIX 系统上唯一真正有用的进程间通信方法是共享内存,但为了有趣/完整性,他提供了一些 hack)。

关于linux - 在进程之间传递消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16689699/

相关文章:

linux - fusebox watch 和热装不工作

java - EJB 中的多线程

java - Java应用程序中CPU核心数和线程数之间的关系是什么?

c - 如何停止 fgets 从 FIFO 文件中读取

C# Hook Windows 进程以检查调试进程

linux - Hosts 文件在 Fedora 上部分工作

linux - 关于 GNU 链接器编辑器 "ld"的问题?

c - 如何检查套接字的另一端是否已被接受?

c# - ThreadPool.QueueUserWorkItem 与 Task.Factory.StartNew

python -c cmd 将等待所有进程完成