Limpieza de recursos en la terminación anormal del proceso

Mi pregunta es, cuando un proceso finaliza de manera anormal (a través de una señal, podría ser SIGKILL, por lo que no podemos interceptarlo), ¿existe algún orden o atomicidad garantizado en el que se liberen sus recursos? En particular, me interesan los bloqueos de archivos y la memoria compartida.

Por ejemplo:

1) Si el proceso mantiene bloqueos en 2 archivos y finaliza de forma anormal, ¿es posible que otro proceso que intente bloquear los mismos archivos vea un archivo bloqueado y otro desbloqueado? ¿O es el proceso de liberación de los bloqueos de archivos atómicos desde el punto de vista de otros procesos?

Si no es atómico, ¿hay al menos un orden predefinido en el que los procesos de cierre se liberarían (por ejemplo, en el orden inverso al que se bloquearon inicialmente)?

2) Quería usar un bloqueo de archivo para garantizar una correcta inicialización de la memoria compartida: los procesos asignados a la memoria compartida mantendrían un bloqueo compartido, y un nuevo proceso que desea asignarse al mismo segmento de memoria compartida intentaría probar ese bloqueo para ver si La inicialización debe realizarse (puedo dar más detalles más adelante si es necesario).

Sin embargo, aquí surge la misma pregunta: si un proceso que mantiene un bloqueo de archivo y también se asigna a un segmento de memoria compartida finaliza de forma anormal, ¿es posible que después de que la memoria compartida se desasigne automáticamente, otros procesos aún verían el bloqueo del archivo como bloqueado? ¿O es que el mapeo del segmento de memoria compartida y el desbloqueo de un archivo son atómicos desde el punto de vista de otros procesos?

Respuestas a la pregunta(2)

Su respuesta a la pregunta