在Linux中杀死后释放内存

时间:2014-05-01 21:13:23

标签: c linux

我正在用C编写一个程序,它使用了一些进程,信号量和映射内存。当我映射内存然后程序在进度中间失败,所以它无法进入释放内存的阶段,程序被卡住了,我必须杀死它(Ctrl + C)。

问题是当我修复错误并再次运行程序时 - 它调用共享内存错误或信号量错误并终止程序。我只能通过重新启动整个操作系统来解决这个问题。

还有另一种方式,如何解除"解除分配"意外错误后分配内存?

仅供参考:ipcs没有显示此分配的内存,也没有显示使用的信号量。

编辑:我不得不标记一个"右边"回答,但我想感谢大家的想法。结果是在问题发生后,删除除了脉冲...在/ dev / shm文件夹中的所有内容是解决方案。

2 个答案:

答案 0 :(得分:2)

Grapsus的评论对于POSIX共享内存是正确的。忘了ipcrm,它只是SysV。在/ dev / shm中挖掘并删除“代表”共享内存块的文件。

你可能还应该放入一个信号处理程序,以便在kill时删除共享内存。如果你要用SIG_KILL(9)杀死它将无法工作,但它将适用于大多数较小的杀戮。一旦信号处理程序到位,常规的kill将调用处理程序,然后处理程序可以在进程关闭之前以编程方式删除共享内存。

答案 1 :(得分:2)

POSIX共享内存没有特定的命令行工具。但它通常映射到/ dev / shm树,您可以使用经典文件操作工具管理段。