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

标签 c multiprocessing signals mmap

我有一个使用 mmap 进行 ipc 的应用程序。我可以多次运行该应用程序吗?会不会有副作用?

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

最佳答案

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

mmap is great if you have multiple processes accessing data in a read only fashion from the same file [...]

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

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

关于c - mmap 可执行文件可以多次使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30274028/

相关文章:

java - 使用JNA从java crash VM调用c,谁能告诉我为什么会这样?

c - C 中具有相同优先级的运算符如何求值?

python - 类型错误 : cannot pickle 'weakref' object

c++ - C++ 的跨平台多处理和多线程库

windows - Windows 上 nginx 的日志轮换

关于赋值运算符的c编程查询请在windows和linux中指定输出及其原因

c - 一次增加两个索引

parallel-processing - 多核MPI?

swift - 在 Swift 命令行应用程序中捕获信号

linux - 如何使用 SIGRTMAX 和 SIGRTMIN?