我正在用C编写一个程序,它使用了一些进程,信号量和映射内存。当我映射内存然后程序在进度中间失败,所以它无法进入释放内存的阶段,程序被卡住了,我必须杀死它(Ctrl + C)。
问题是当我修复错误并再次运行程序时 - 它调用共享内存错误或信号量错误并终止程序。我只能通过重新启动整个操作系统来解决这个问题。
还有另一种方式,如何解除"解除分配"意外错误后分配内存?
仅供参考:ipcs没有显示此分配的内存,也没有显示使用的信号量。
编辑:我不得不标记一个"右边"回答,但我想感谢大家的想法。结果是在问题发生后,删除除了脉冲...在/ dev / shm文件夹中的所有内容是解决方案。答案 0 :(得分:2)
Grapsus的评论对于POSIX共享内存是正确的。忘了ipcrm,它只是SysV。在/ dev / shm中挖掘并删除“代表”共享内存块的文件。
你可能还应该放入一个信号处理程序,以便在kill时删除共享内存。如果你要用SIG_KILL(9)杀死它将无法工作,但它将适用于大多数较小的杀戮。一旦信号处理程序到位,常规的kill将调用处理程序,然后处理程序可以在进程关闭之前以编程方式删除共享内存。
答案 1 :(得分:2)
POSIX共享内存没有特定的命令行工具。但它通常映射到/ dev / shm树,您可以使用经典文件操作工具管理段。