【问题标题】:cross memory attach. How do I get the remote address from a child process to a parent process跨内存附加。如何从子进程获取远程地址到父进程
【发布时间】:2013-06-26 15:41:29
【问题描述】:

Linux 内核版本 3.2 还具有称为跨内存附加的功能。

这是它的链接。在这方面我无法得到很多帮助。 http://man7.org/linux/man-pages/man2/process_vm_readv.2.html

在语法中,我们需要要写入或读取的远程内存的地址。我的问题是,如果我使用 fork(),我如何获得这个远程内存的地址。

假设我正在使用跨内存附加从父进程向子进程发送一些东西。如何将远程内存的地址从子进程发送到父进程?

【问题讨论】:

  • 您可以使用标准的pipe(2) 或从/proc/pid/maps 获取映射
  • 我可以使用管道将指针从一个进程发送到另一个进程吗? ...
  • 您当然可以通过管道发送地址,然后使用process_vm_* 访问该内存。但除非你打算只自己运行代码,否则我建议你只使用常见的 IPC 机制,如pipesocketpair。 Linux 3.x 不会在未来 2-3 年内部署在任何重要的服务器上,因此您为此开发的任何代码都将无法移植。
  • 谢谢...我能做到。再多一点。为什么他们不打算将它部署在严肃的服务器上?这个内核已经存在了很长一段时间了,对吧?
  • 因为新软件被认为足够稳定可以部署需要一段时间。对新实现的偏执可能会持续数年。我们仍然停留在 Linux 2.6.28 上,只是因为我们知道它是稳定的并且可以工作。我听说 NASA 刚刚批准将 80386 发射到太空。

标签: c architecture linux-kernel system


【解决方案1】:

系统调用process_vm_readvprocess_vm_writev 用于进程之间的快速数据传输。除了一些传统的进程间通信方式之外,还应该使用它们。

例如,您可以使用常规管道或 fifo 在进程之间传输所需的地址。然后您可以使用这些地址来建立更快的process_vm_ 通信。在分叉进程之间传输内容的最简单方法应该是 pipe() 函数(man 2 pipe 有一个很好的用法示例)。当然,还有许多其他方法可以做到这一点,例如使用套接字或消息。您甚至可以将地址写入文件并让其他进程读取它。

【讨论】:

猜你喜欢
  • 2013-07-18
  • 2018-09-09
  • 2011-07-16
  • 2014-07-28
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-23
相关资源
最近更新 更多