Разрешить только родительский процесс UNLINK объект разделяемой памяти

голоса
0

У меня есть несколько процессов , которые используют shm_open(они могут быть породили в любом порядке).

Все они имеют один и тот же поток, как:

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

Таким образом, если объект разделяемой памяти уже существует, он просто открывает его, вместо того, чтобы пытаться создать его. Есть ли способ сделать то же самое для если текущий процесс не открыть его, не удалить его?

Я спрашиваю , потому что если у меня есть 3 + дочерние процессы и один из родителей, если один из детей умирают и запускает shm_unlinkне более дочерние процессы могут подключаться и общаться с родителем , так как он был несвязанные.

Есть ли способ , чтобы иметь ребенок процессы не в состоянии разъединить то , что они не создавали? IE: Как вызвать EACCESSдля shm_unlinkили запуска что - то подобное?

«EACCES - Разрешение на shm_unlink () было отказано в общий объект памяти.»

Задан 03/12/2019 в 00:00
источник пользователем
На других языках...                            


1 ответов

Разрешить только родительский процесс UNLINK объект разделяемой памяти

голоса
0

У меня есть несколько процессов , которые используют shm_open(они могут быть породили в любом порядке).

Все они имеют один и тот же поток, как:

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

Таким образом, если объект разделяемой памяти уже существует, он просто открывает его, вместо того, чтобы пытаться создать его. Есть ли способ сделать то же самое для если текущий процесс не открыть его, не удалить его?

Я спрашиваю , потому что если у меня есть 3 + дочерние процессы и один из родителей, если один из детей умирают и запускает shm_unlinkне более дочерние процессы могут подключаться и общаться с родителем , так как он был несвязанные.

Есть ли способ , чтобы иметь ребенок процессы не в состоянии разъединить то , что они не создавали? IE: Как вызвать EACCESSдля shm_unlinkили запуска что - то подобное?

«EACCES - Разрешение на shm_unlink () было отказано в общий объект памяти.»

Ответил 03/12/2019 в 00:00
источник пользователем

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