O que acontece com uma área de memória compartilhada quando um processo é interrompido?

1

Gostaria de saber o que acontece com a memória compartilhada criada com shmget() , conforme mostrado em link quando algum dos processos termina ou morre? A área é libertada ou persistirá?

    
por cerr 09.08.2018 / 21:01

2 respostas

1

Ele persistirá, deve ser explicitamente excluído com shmctl IPC_RMID

Mark the segment to be destroyed. The segment will actually be destroyed only after the last process detaches it ... The caller must be the owner or creator of the segment, or be privileged.

    
por 09.08.2018 / 21:09
1

Depende se o autor do aplicativo sabe como lidar com esse problema.

Muitos aplicativos são escritos para que eles chamem

shmctl(id, IPC_RMID, 0);

depois que eles pararam de usar o segmento de memória compartilhada.

Neste caso, o segmento de memória continuará a existir após o programa ter morrido inesperadamente, e. com um coredump.

Se o programa, no entanto, chamar shmctl(id, IPC_RMID, 0); diretamente depois de anexar o segmento de memória, o kernel fará a manutenção necessária para qualquer tipo de término do programa.

    
por 09.08.2018 / 21:25