If a process is killed with SIGKILL, will the changes it has made to a memory-mapped file be flushed to disk? I assume that if the OS ensures a memory-mapped file is flushed to disk when the process is killed via SIGKILL, then it will also do so with other terminating signals (SIGABRT, SIGSEGV, etc...).
views:
293answers:
1
+8
A:
It will depend on whether the memory-mapped file is opened with modifications private (MAP_PRIVATE) or not (MAP_SHARED). If private, then no; the modifications will not be written back to disk. If shared, the kernel buffer pool contains the modified buffers, and these will be written to disk in due course - regardless of the cause of death.
Jonathan Leffler
2009-05-14 14:37:51
Thanks!Do you have any documentation about this behaviour? I couldn't find any.
2009-05-14 17:48:06
The POSIX standard (http://www.opengroup.org/onlinepubs/9699919799/toc.htm) for mmap() says: If MAP_SHARED is specified, write references shall change the underlying object. No weasel words about 'unless the process is killed after the memory write completes but before the data is flushed to disk'.
Jonathan Leffler
2009-05-14 20:23:56