我想避免将某些信息从我的程序转储到核心文件中,以防发生崩溃。
为此,我可以使用coredump_filter( http://man7.org/linux/man-pages/man5/core.5.html )
手册页提供以下说明
文件中的值是内存映射types的位掩码(请参见mmap(2))。 如果在掩码中设置了一个位,则转储相应types的存储器映射; 否则他们不会被倾销。 该文件中的位具有以下含义:
bit 0 Dump anonymous private mappings. bit 1 Dump anonymous shared mappings. bit 2 Dump file-backed private mappings. bit 3 Dump file-backed shared mappings. bit 4 (since Linux 2.6.24) Dump ELF headers. bit 5 (since Linux 2.6.28) Dump private huge pages. bit 6 (since Linux 2.6.28) Dump shared huge pages.
我正在寻找知道哪些位设置和重置在我的情况。 我不清楚这些领域特别私人和共享。
我有一个缓冲区(无符号字符*)到内存中。 如果发生任何崩溃,我不想将这个文件转储到核心文件中。 是否有任何具体的标志,我必须使用mmap? 请帮忙。 提前致谢。
coredump_filter只会设置进程全局设置,所以它基本上只允许你转储所有的内存或没有。
然而,有一个标志madvise可能做一些更接近你想要的东西: MADV_DONTDUMP 。 它会标记特定的内存页面,不会出现在coredump中。 尽管如此,你的程序将需要madvise运行。 你不能从流程之外设置它(除了使用gdb ,我猜)。
请注意, madvise只能在整个页面上运行,但是。 你不能设置标志“这193个字节”,或者不能被抛弃。 如果您标记缓冲区所在的页面,则同一页面的其余部分也不会被转储。 如果这对你来说是一个问题,我认为你只需要在你的缓冲区中进行mmap ,而不是将其malloc到一个页面中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。