IPC: 공유 메모리 종료 프로세스 알림

IPC: 공유 메모리 종료 프로세스 알림

공유 메모리 시스템에서 두 프로세스가 공유 메모리 세그먼트를 공유할 때 한 프로세스가 종료된 후 공유 메모리 시스템은 종료된 프로세스를 실행 중인 다른 프로세스에 어떻게 알립니까?

답변1

이 문제를 처리하는 유일한 방법은 프로세스 간에 일종의 하트비트 시스템을 사용하는 것입니다. 예를 들어, 첫 번째 프로세스는 공유 메모리에서 PID를 공유할 수 있습니다.

후속 프로세스는 SIGUSR1과 같은 신호를 보내 자신을 알릴 수 있습니다. 그런 다음 가끔씩 하트비트로 SIGUSR2를 계속 보낼 수 있습니다. 두 개의 누락된 SIGUSR2 신호가 연속으로 나타나면 프로세스가 종료되었음을 알려줍니다. 이것이 작동하려면 신호 송신자의 PID를 전달하기 위해 sigqueue(2) sigaction(2)을 사용해야 합니다.

또 다른 접근 방식은 다른 공유 프로세스를 공유 메모리에 액세스하는 첫 번째 프로세스의 하위 프로세스로 예약하는 것입니다. 자녀가 사망하면 자동 SIGCHLD가 부모에게 전송됩니다. 현재 공유 프로세스를 독립적으로 시작하더라도 이를 변경하여 새 프로세스가 메모리를 공유하려는 첫 번째 프로세스에 신호를 보낼 수 있습니다. 그런 다음 첫 번째 프로세스는 메모리를 공유하려는 프로세스의 활동을 인수하기 위해 새로운 하위 프로세스를 분기하여 상위/하위 관계를 유지할 수 있습니다.

개인적으로 저는 0MQ(가이드를 읽으려면 여기로 이동하세요.) 이를 달성하기 위해 UNIX 커널 서비스를 사용하기 전에. 공유 메모리를 버리고 Memcache를 사용하여 데이터를 공유할 수도 있습니다. 실제로 저는 하트비트와 IPC에 0MQ를 사용하고 Memcache를 통해 공유 메모리를 사용하여 여러 프로세스가 있는 시스템을 구현했습니다.

답변2

그러나 실제로는 그렇지 않습니다. 프로세스는 연결된 다른 프로세스에 대한 알림 없이 언제든지 공유 메모리 세그먼트에 연결하고 분리할 수 있습니다.

관련 정보