在作者进程完成后,即使SHMCTL不用于删除IT

问题描述 投票:0回答:0
我正在使用System V共享内存中的

。作者进程成功地使用

shmget()
创建了共享内存。当作者进程结束时,我注意到共享内存段消失了,即使我不用来删除它。 在这里是作者的代码:
shmctl()
读者的代码是:

IPC_RMID

当我经营作者时,我可以使用
// writer.c #include <stdio.h> #include <stdlib.h> #include <sys/ipc.h> #include <sys/shm.h> #include <unistd.h> #define SHM_KEY 0x1234 #define SHM_SIZE sizeof(int) int main() { int shmid = shmget(SHM_KEY, SHM_SIZE, IPC_CREAT | 0666); if (shmid == -1) { perror("shmget failed"); exit(1); } int *shm_ptr = (int *)shmat(shmid, NULL, 0); if (shm_ptr == (void *)-1) { perror("shmat failed"); exit(1); } *shm_ptr = 42; printf("Writer: wrote %d to shared memory.\n", *shm_ptr); // Keeping writer alive printf("Writer: sleeping for 30 seconds...\n"); sleep(30); shmdt(shm_ptr); return 0; }

看到共享存储器。但是,在作者完成和退出后,共享内存段消失了,我无法与读者访问。

可能导致这种行为?是否存在可能导致共享内存自动删除的系统设置? 此程序
macos

上正确地工作了,在作者退出后,共享内存持续存在。但是,它在

linux
上:共享内存段一旦作者的过程结束就会消失,我无法与阅读器访问。 我使用ubuntu linux 5.15.0-127总生

感谢您的关注,我将感谢您对此主题的任何其他见解!

我是这个问题的OP。谢谢大家的关注! 我只是找出了这种意外行为背后的原因。它似乎与Linux内核配置有关 - // reader.c #include <stdio.h> #include <stdlib.h> #include <sys/ipc.h> #include <sys/shm.h> #define SHM_KEY 0x1234 #define SHM_SIZE sizeof(int) int main() { int shmid = shmget(SHM_KEY, SHM_SIZE, 0666); if (shmid == -1) { perror("shmget failed"); exit(1); } int *shm_ptr = (int *)shmat(shmid, NULL, 0); if (shm_ptr == (void *)-1) { perror("shmat failed"); exit(1); } printf("Reader: read %d from shared memory.\n", *shm_ptr); shmdt(shm_ptr); return 0; } 。当我使用以下命令更改它时: ipcs -m

所有的一切都按预期开始工作。 我希望这个答案对您有意义!

c linux operating-system ipc shared-memory
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.