Se un processo viene ucciso con SIGKILL, saranno i cambiamenti che ha apportate a un file memory-mapped essere scaricate su disco? Suppongo che se il sistema operativo assicura che un file mappato in memoria venga scaricato su disco quando il processo viene ucciso tramite SIGKILL, lo farà anche con altri segnali di terminazione (SIGABRT, SIGSEGV, ecc ...).Il sistema operativo (POSIX) svuota un file mappato in memoria se il processo è SIGKILLed?
13
A
risposta
16
Dipenderà se il file mappato in memoria viene aperto con modifiche privata (MAP_PRIVATE) o meno (MAP_SHARED). Se privato, allora no; le modifiche non verranno riscritte sul disco. Se condiviso, il pool del buffer del kernel contiene i buffer modificati e questi verranno scritti sul disco a tempo debito, indipendentemente dalla causa della morte.
0
ho posto una domanda simile me stesso e poi seguiti con il codice di dimostrazione, quando ero insoddisfatto con le risposte. Vedere mmap, msync and linux process termination
Grazie! Hai qualche documentazione su questo comportamento? Non sono riuscito a trovarne. – chila
dallo standard POSIX (http://www.opengroup.org/onlinepubs/9699919799/toc.htm) per mmap() dice: Se non viene specificato MAP_SHARED, scrivere i riferimenti devono modificare l'oggetto sottostante. Nessuna parola di donnola su "a meno che il processo non venga ucciso dopo il completamento della scrittura della memoria, ma prima che i dati vengano scaricati sul disco". –