我可以在没有任何传递的情况下在 2 个进程之间共享内存吗? (在 Android NDK 中)

Can I Share memory between 2 process without any passing? (In Android NDK)

我的开发环境是 Android Studio with NDK。最小 SDK 级别为 26 以使用 NDK 共享内存 header。 https://developer.android.com/ndk/reference/group/memory

我成功地在 child 和 parents 之间使用了共享内存。但问题是,我需要在 fork() 之前创建文件描述符。以下是我的做法。

  1. 从 parents.
  2. 创建文件描述符 (AsharedMemory_create)
  3. fork()
  4. mmap 来自 child 使用 parents 文件描述符。在缓冲区上处理一些东西。
  5. 来自 parents 的 mmap 用于同步并获取缓冲区。

它工作正常,但它需要在 fork 之前从 parents pre-make。我不想要它。另外,我不想在 Java.

中使用 Parcel 文件描述符

我想在任何地方创建共享内存并与其他进程共享但不使用传递它。有没有办法在 child 和 parents 之间使用 'same' 共享内存?或不同进程之间(类似于 child 和 child)?

我尝试在 child 和 parents 中为共享内存创建具有 相同名称、相同大小 的文件描述符,但它不起作用。在 child 做了同样的事情之后,还尝试在 parents 中创建文件描述符和 mmap,但即使我没有在 child 中进行 munmap 或关闭,它也不起作用。我所能得到的只是 parents 或其他 child 中的 NULL。这是不可能的吗?

//========================(11.15.2018 Update)============== ==================

  1. 在 child 中创建 fd 并关闭。从 parents (X)
  2. 打开
  3. 在 child 中进行 fd 和睡眠。从 parents (X)
  4. 打开
  5. 在 child 和 msync 中创建 fd。从 parents (X)
  6. 打开

我检查了很多东西,但它无法实现。没有神奇的解决方案。 如果我想使用使用其他进程的 FD 的共享内存,我需要通过 IPC 获取 FD。另外android建议Unix域套接字传递fd。