mmap 的可执行文件可以多次使用吗?

Posted

技术标签:

【中文标题】mmap 的可执行文件可以多次使用吗?【英文标题】:executable with mmap can use for multiple times? 【发布时间】:2015-05-16 09:34:15 【问题描述】:

我有一个将 mmap 用于 ipc 的应用程序。我可以多次运行此应用程序吗?会有副作用吗?

我的应用场景: 我的应用程序派生了一个子进程,其工作是始终随机终止父进程,但它应该以受控方式执行此操作,例如在父进程中设置一个变量,指示子进程终止父进程(这里是 mmap) .父进程有一个信号处理程序,它可以再次恢复应用程序,子进程杀死它继续的父进程...... 谁能帮我?提前感谢

【问题讨论】:

【参考方案1】:

多次运行您的应用程序是否会产生副作用取决于您如何实现它。请查看this answer。它包含很多有用的信息。例如:

如果您有多个进程以只读方式从同一个文件访问数据,mmap 非常棒 [...]

这意味着:如果您想为多个父/子对使用相同的共享内存,那么您需要同步对该共享内存的访问。请查看this Q&A 了解如何执行此操作。当然,您必须确保每个父/子对在共享内存中使用自己的变量。

另一种选择是为每个父/子对使用单独的共享内存段。例如,您可以通过将父进程的进程 ID 作为共享内存文件名的一部分来做到这一点。然后,当您 fork 子进程时,您将进程 ID(或共享内存文件名)传递给子进程,以便父子进程知道使用哪个共享内存来相互通信。

【讨论】:

以上是关于mmap 的可执行文件可以多次使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

Racket如何生成二进制的可执行文件?

cx 冻结的可执行文件是不是可破解 [重复]

valgrind/callgrind 可以在发布的可执行 C++ 程序上工作吗?

程序编译链接后形成的可执行文件是啥文件

不同 C 编译器生成的可执行文件的差异

如何把ndk编译出来的可执行文件伪装成so打包到apk中