Gibt es eine Möglichkeit für Prozess A (die ein gemeinsames Speichersegment mit der Bibliothek POSIX shm_open
erstellt - ich bin nicht an der Shared Memory-API SysV interessiert) zu erkennen, dass Prozess B das gleiche Shared-Memory-Segment geöffnet hat? Ich brauche einen Weg für Prozess A, um "Arbeit" zu starten, nachdem Prozess B denselben gemeinsamen Speicher geöffnet hat. Der Vorschlag ist, dass A etwas abfragt, bis B verbunden ist. (In meinem Fall gibt es tatsächlich 3 Prozesse B1, B2, B3, also muss ich warten, bis alle 3 den gemeinsamen Speicher geöffnet haben).Wie zähle ich die Anzahl der Prozesse, die an ein bestimmtes Shared-Memory-Segment gebunden sind?
Ich spielte mit lsof /dev/shm/foo
und kratze die Prozess-IDs, aber ich möchte nicht nur eine Shell aufrufen müssen, um dies zu tun.
Ich sehe andere SO Antworten, die solve this problem by creating a semaphore und ich könnte auch ein anderes Messaging-System verwenden, aber ich war auf der Suche nach einer Lösung mit weniger beweglichen Teilen.
'struct shmid_ds * buf' hat eine Variable namens' shm_nattch', die Sie abfragen können. Sie müssen 'shmctl' aufrufen, um diesen Puffer zu erhalten. –
@COLDSPEED - Danke, aber ich muss die POSIX (aka "Realtime") 'shm_open' API verwenden, nicht die System V' shmctl' API. –
@MarkLakata Ich denke, es wird funktionieren, weil es Teil der 'POSIX: XSI Extension' ist und auf der man-Seite es eindeutig angeben, dass es eine POSIX-Konformität ist. –