在 Linux 或其他现代操作系统中,每个进程的内存都受到保护,因此一个进程中的疯狂写入不会导致任何其他进程崩溃。现在假设我们在进程 A 和进程 B 之间共享内存。现在假设,由于软错误,进程 A 无意中向该内存区域写入了一些内容。鉴于进程 A 和进程 B 都对该内存具有完全写访问权限,是否有任何方法可以防止这种情况?
你打电话时shm_open http://linux.die.net/man/3/shm_open你可以通过它O_RDONLY
模式参数的标志。
或者你可以使用mprotect http://linux.die.net/man/3/mprotect将特定页面标记为(例如)只读。您需要两个进程之间的合作和信任才能做到这一点,B 无法说 A 无法使用以下命令对其进行写入mprotect
.
如果您确实想确保其他进程不会干扰,那么通过某种描述的管道或套接字进行通信可能是一个明智的想法。
你也可以使用mmap
映射某物(例如在/dev/shm
?)如果两个进程作为单独的 UID 运行,则文件权限使得它们无法写入。例如,如果您有/dev/shm/myprocess
由用户生产者和组消费者拥有,并在由使用该 UID 和 GID 运行的进程映射它之前将文件权限设置为 0640,然后您可以阻止第二个进程写入它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)