pozwala jedynie proces macierzysty odłączyć obiektu udostępnionego pamięci

głosy
0

Mam wiele procesów, które zastosowań shm_open(mogą one zostać postawione w dowolnej kolejności).

Wszystkie z nich mają taki sam przebieg, jak:

int shm_fd = shm_open(pid, O_CREAT | O_EXCL | O_RDWR, S_IRWXU);
if (shm_fd == -1 && errno == EEXIST)
{
    //The object is already created so open it instead..
    shm_fd = shm_open(pid, O_RDWR, S_IRWXU);
}

if (shm_fd != -1)
{
    //do stuff..
}

Więc jeśli obiekt udostępniony pamięci już istnieje, to po prostu otwiera go zamiast próbować go stworzyć. Czy istnieje sposób, aby zrobić to samo dla jeśli obecny proces nie otworzył go, nie odłączyć go?

Pytam, bo jeśli mam 3+ procesy potomne i jeden rodzic, jeśli jedno z dzieci umiera i uruchamia shm_unlinkma więcej procesy potomne mogą łączyć i komunikować się z rodzicem, ponieważ został odłączony.

Czy istnieje sposób, aby mieć dzieci procesy nie rozłączyć czego nie stworzył? IE: Jak wyzwalać EACCESSza shm_unlinklub wyzwalacza coś podobnego?

„EACCES - Pozwolenie na shm_unlink () współdzielony obiekt pamięć została odrzucona.”

Utwórz 03/12/2019 o 00:00
źródło użytkownik
W innych językach...                            


1 odpowiedzi

pozwala jedynie proces macierzysty odłączyć obiektu udostępnionego pamięci

głosy
0

Mam wiele procesów, które zastosowań shm_open(mogą one zostać postawione w dowolnej kolejności).

Wszystkie z nich mają taki sam przebieg, jak:

int shm_fd = shm_open(pid, O_CREAT | O_EXCL | O_RDWR, S_IRWXU);
if (shm_fd == -1 && errno == EEXIST)
{
    //The object is already created so open it instead..
    shm_fd = shm_open(pid, O_RDWR, S_IRWXU);
}

if (shm_fd != -1)
{
    //do stuff..
}

Więc jeśli obiekt udostępniony pamięci już istnieje, to po prostu otwiera go zamiast próbować go stworzyć. Czy istnieje sposób, aby zrobić to samo dla jeśli obecny proces nie otworzył go, nie odłączyć go?

Pytam, bo jeśli mam 3+ procesy potomne i jeden rodzic, jeśli jedno z dzieci umiera i uruchamia shm_unlinkma więcej procesy potomne mogą łączyć i komunikować się z rodzicem, ponieważ został odłączony.

Czy istnieje sposób, aby mieć dzieci procesy nie rozłączyć czego nie stworzył? IE: Jak wyzwalać EACCESSza shm_unlinklub wyzwalacza coś podobnego?

„EACCES - Pozwolenie na shm_unlink () współdzielony obiekt pamięć została odrzucona.”

Odpowiedział 03/12/2019 o 00:00
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more