在Linux或其他现代操作系统中,每个进程的内存都受到保护,因此在一个进程中进行通配写操作不会使任何其他进程崩溃。现在假设,我们在进程A和进程B之间共享内存。现在说,由于软错误,进程A无意中将某些内容写入该内存区域。有没有办法保护这个,因为进程A和进程B都有对该内存的完全写访问权。
答案 0 :(得分:2)
当您致电shm_open
时,您可以将O_RDONLY
标志传递给模式参数。
或者,您可以使用mprotect
将特定页面标记为(例如)只读。你需要在这两个进程之间进行合作和信任才能做到这一点,B无法说A不能使用mprotect
写入它。
如果你真的想确定其他进程不会干扰,那么通过某些描述的管道或套接字进行通信可能是一个明智的想法。
您还可以使用mmap
映射某些内容(例如在/dev/shm
中?)如果文件权限作为单独的UID运行,则无法为两个进程之一写入文件权限。例如,如果用户生产者和组使用者拥有/dev/shm/myprocess
,并且在使用该UID和GID运行的进程映射之前将文件权限设置为0640,那么您可以阻止第二个进程写入它。
答案 1 :(得分:0)
您可以在每次写入时使用简单的校验和。因此,当一个进程在读取操作时检测到错误的校验和时,它就是另一个进程失败的标志。