在 Linux 或其他现代操作系统中,每个进程的内存都受到保护,因此一个进程中的疯狂写入不会导致任何其他进程崩溃。现在假设我们在进程 A 和进程 B 之间共享内存。现在假设,由于软错误,进程 A 无意中向该内存区域写入了一些内容。鉴于进程 A 和进程 B 都对该内存具有完全写访问权限,是否有任何方法可以防止这种情况发生?
当您调用时,shm_open您可以将标志传递O_RDONLY给模式参数。
或者,您可以将mprotect特定页面标记为(例如)只读。为此,您需要两个进程之间的合作和信任,B 无法说 A 无法使用mprotect.
如果您确实想确保其他进程不会干扰,那么通过某种描述的管道或套接字进行通信可能是一个明智的想法。
您还可以使用mmap映射某个东西(例如在/dev/shm?),如果两个进程作为单独的 UID 运行,则文件权限使得它们无法写入。例如,如果您/dev/shm/myprocess由用户生产者和组消费者拥有,并在由使用该 UID 和 GID 运行的进程映射它之前将文件权限设置为 0640,那么您可以阻止第二个进程写入该文件。
| 归档时间: |
|
| 查看次数: |
5178 次 |
| 最近记录: |