我正在使用一些進程,信號量和映射內存在C中編寫程序。當我映射內存,然後程序在進程中失敗,所以無法進入釋放內存的階段,程序就停止了,我必須殺死它(Ctrl + C)。在Linux中kill後釋放內存
問題是,當我修復錯誤並再次運行程序 - 它調用共享內存錯誤或信號量錯誤,程序終止。我只能通過重新啓動整個操作系統來解決此問題。
有沒有另一種方式,如何在釋放意外錯誤後「釋放」分配的內存?
僅供參考:ipcs不顯示此分配的內存,也不顯示使用的信號量。
編輯:我不得不標記一個「正確」的答案,但我想感謝大家的想法。結果是,在問題發生後,刪除/ dev/shm文件夾中除pulse之外的所有內容都是解決方案。
我不相信'ipcs'會顯示POSIX shm段(即'shm_open()'),但不會顯示SysV IPC(例如'shmget')。 –
所以你說 - 因爲我使用POSIX的方式,我將永遠不得不重新啓動操作系統? – Croolman
您可以添加SIGINT/SIGTERM處理程序來取消映射內存。 – Andy