2009-05-14 12 views
13

Si se mata un proceso con SIGKILL, ¿los cambios que ha realizado en un archivo mapeado en memoria se vacían en el disco? Supongo que si el sistema operativo garantiza que un archivo mapeado en memoria se vacía en el disco cuando el proceso se mata a través de SIGKILL, también lo hará con otras señales de terminación (SIGABRT, SIGSEGV, etc.).¿El SO (POSIX) vacía un archivo mapeado en memoria si el proceso está SIGKILL?

Respuesta

16

Dependerá de si el archivo mapeado en memoria se abre con modificaciones privadas (MAP_PRIVATE) o no (MAP_SHARED). Si es privado, entonces no; las modificaciones no se escribirán en el disco. Si se comparte, el conjunto de búferes del kernel contiene los búferes modificados, que se escribirán en el disco a su debido tiempo, independientemente de la causa de la muerte.

+0

¡Gracias! ¿Tiene alguna documentación sobre este comportamiento? No pude encontrar ninguno. – chila

+4

El estándar POSIX (http://www.opengroup.org/onlinepubs/9699919799/toc.htm) para mmap() dice: Si se especifica MAP_SHARED, las referencias de escritura cambiarán el objeto subyacente. No hay palabras de comadreja sobre 'a menos que el proceso se mate después de que se complete la escritura de la memoria, pero antes de que los datos se descarguen al disco'. –

Cuestiones relacionadas