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