如何保护Linux中进程之间共享的内存

时间:2011-08-27 19:30:41

标签: c linux memory

在Linux或其他现代操作系统中,每个进程的内存都受到保护,因此在一个进程中进行通配写操作不会使任何其他进程崩溃。现在假设,我们在进程A和进程B之间共享内存。现在说,由于软错误,进程A无意中将某些内容写入该内存区域。有没有办法保护这个,因为进程A和进程B都有对该内存的完全写访问权。

2 个答案:

答案 0 :(得分:2)

当您致电shm_open时,您可以将O_RDONLY标志传递给模式参数。

或者,您可以使用mprotect将特定页面标记为(例如)只读。你需要在这两个进程之间进行合作和信任才能做到这一点,B无法说A不能使用mprotect写入它。

如果你真的想确定其他进程不会干扰,那么通过某些描述的管道或套接字进行通信可能是一个明智的想法。

您还可以使用mmap映射某些内容(例如在/dev/shm中?)如果文件权限作为单独的UID运行,则无法为两个进程之一写入文件权限。例如,如果用户生产者和组使用者拥有/dev/shm/myprocess,并且在使用该UID和GID运行的进程映射之前将文件权限设置为0640,那么您可以阻止第二个进程写入它。

答案 1 :(得分:0)

您可以在每次写入时使用简单的校验和。因此,当一个进程在读取操作时检测到错误的校验和时,它就是另一个进程失败的标志。