Bare tillater overordnede prosessen for å unlink delt minne objekt

stemmer
0

Jeg har en flere prosesser som bruker shm_open(de kan framsatt i hvilken som helst rekkefølge).

Alle av dem har samme flyten som:

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..
}

Så hvis det delte minnet objektet allerede eksisterer, det bare åpner den i stedet for å prøve å lage den. Er det en måte å gjøre det samme for hvis den nåværende prosessen ikke åpne den, må du ikke koble fra det?

Jeg spør fordi hvis jeg har 3 + barn prosesser og en forelder, hvis en av barna dør og utløser shm_unlinkikke flere barn prosesser kan koble til og kommunisere med den overordnede siden den ble frakoblet.

Er det en måte å få barn prosesser ikke klarer å koble fra hva de ikke skapte? IE: Hvordan utløse EACCESSfor shm_unlinkeller utløse noe lignende?

EACCES - Tillatelse til shm_unlink () delt minne objektet ble avslått.

Publisert på 03/12/2019 klokken 00:00
kilden bruker
På andre språk...                            


1 svar

Bare tillater overordnede prosessen for å unlink delt minne objekt

stemmer
0

Jeg har en flere prosesser som bruker shm_open(de kan framsatt i hvilken som helst rekkefølge).

Alle av dem har samme flyten som:

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..
}

Så hvis det delte minnet objektet allerede eksisterer, det bare åpner den i stedet for å prøve å lage den. Er det en måte å gjøre det samme for hvis den nåværende prosessen ikke åpne den, må du ikke koble fra det?

Jeg spør fordi hvis jeg har 3 + barn prosesser og en forelder, hvis en av barna dør og utløser shm_unlinkikke flere barn prosesser kan koble til og kommunisere med den overordnede siden den ble frakoblet.

Er det en måte å få barn prosesser ikke klarer å koble fra hva de ikke skapte? IE: Hvordan utløse EACCESSfor shm_unlinkeller utløse noe lignende?

"EACCES - Tillatelse til shm_unlink () delt minne objektet ble avslått."

Svarte 03/12/2019 kl. 00:00
kilden bruker

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