2009-05-14 31 views
13

Nếu một quá trình bị giết bằng SIGKILL, các thay đổi mà nó đã thực hiện đối với một tệp ánh xạ bộ nhớ có được chuyển sang đĩa không? Tôi giả sử rằng nếu hệ điều hành đảm bảo một tập tin ánh xạ bộ nhớ được xả vào đĩa khi quá trình bị giết qua SIGKILL, thì nó cũng sẽ làm như vậy với các tín hiệu đầu cuối khác (SIGABRT, SIGSEGV, v.v ...).Hệ điều hành (POSIX) có xóa tệp ánh xạ bộ nhớ nếu quá trình này được SIGKILL không?

Trả lời

16

Nó sẽ phụ thuộc vào việc tệp ánh xạ bộ nhớ được mở với các sửa đổi riêng tư (MAP_PRIVATE) hay không (MAP_SHARED). Nếu riêng thì không; các sửa đổi sẽ không được ghi lại vào đĩa. Nếu được chia sẻ, vùng đệm của bộ đệm hạt nhân chứa các bộ đệm đã sửa đổi, và các bộ đệm này sẽ được ghi vào đĩa theo đúng hướng - bất chấp nguyên nhân gây ra cái chết.

+0

Cảm ơn! Bạn có bất kỳ tài liệu nào về hành vi này không? Tôi không thể tìm thấy. – chila

+4

Tiêu chuẩn POSIX (http://www.opengroup.org/onlinepubs/9699919799/toc.htm) cho mmap() nói: Nếu MAP_SHARED được chỉ định, ghi tham chiếu sẽ thay đổi đối tượng bên dưới. Không có từ chồn nào về 'trừ khi quá trình này bị giết sau khi ghi bộ nhớ hoàn thành nhưng trước khi dữ liệu bị xóa vào đĩa'. –

Các vấn đề liên quan