IPC: memória compartilhada matou notificação de processo

3

No sistema de memória compartilhada, quando dois processos compartilham um segmento de memória compartilhada, após um processo ser eliminado, como o outro processo em execução será notificado do processo eliminado pelo sistema de memória compartilhada?

    
por mav_2k 31.01.2012 / 17:29

2 respostas

1

A única maneira de lidar com isso seria ter algum tipo de sistema de heartbeat entre os processos. Por exemplo, o primeiro processo poderia compartilhar seu PID na memória compartilhada.

Processos subseqüentes podem se anunciar enviando um sinal como SIGUSR1. Então eles poderiam continuar enviando SIGUSR2 em intervalos como um batimento cardíaco. Dois sinais SIGUSR2 em falta diriam que o processo tinha morrido. Você precisaria usar sigqueue (2) sigaction (2) para comunicar o PID do remetente do sinal para que isso funcione.

Outra maneira é organizar os outros processos de compartilhamento como filhos do primeiro processo para acessar a memória compartilhada. Então a morte de uma criança resulta em um SIGCHLD automático para o pai. Mesmo se atualmente você tem os processos de compartilhamento iniciados independentemente, você pode alterá-los para sinalizar o primeiro processo que um novo processo deseja compartilhar memória. Em seguida, o primeiro processo pode bifurcar um novo filho para assumir a atividade do processo que deseja compartilhar a memória, preservando assim o relacionamento pai / filho.

Pessoalmente, eu primeiro observaria um método IPC mais moderno como o 0MQ ( clique aqui e leia o guia ) antes de tentar implementar isso com os serviços do kernel do UNIX. Eu até desistiria da memória compartilhada e usaria o memcache para compartilhar os dados. Na verdade eu implementei um sistema com vários processos usando o 0MQ para heartbeats e IPC e compartilhando memória via memcache.

    
por 01.02.2012 / 08:31
0

Não é. Os processos podem ser anexados e desanexados ao segmento de memória compartilhada a qualquer momento e nenhuma notificação é dada a outros processos anexados (se houver algum).

    
por 01.02.2012 / 03:55