我想避免将程序中的某些信息转储到核心文件中,以防发生任何崩溃。
为此,我可以使用 coredump_filter (http://man7.org/linux/man-pages/man5/core.5.html http://man7.org/linux/man-pages/man5/core.5.html)
手册页提供以下描述
文件中的值是内存映射类型的位掩码(请参见
映射(2))。如果在掩码中设置了一位,则该位的内存映射
相应的类型被转储;否则它们不会被倾倒。这
该文件中的位具有以下含义:
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.
我想知道在我的情况下要设置和重置哪一位。我不清楚这些字段特别是私有和共享的。
我在内存中有一个缓冲区(unsigned char*)。我不想将其转储到核心文件中,以防发生任何崩溃。 mmap 是否需要使用任何特定标志?请帮忙。提前致谢。
coredump_filter
只会设置进程全局设置,因此基本上只允许您转储所有内存或不转储内存。
然而,有一个标志madvise
这可能会做一些更接近你想要的事情:MADV_DONTDUMP
。它将标记未出现在核心转储中的特定内存页面。你的程序需要运行madvise
但它本身;你不能从进程外部设置它(除非使用gdb
, 我猜)。
请注意madvise
然而,只能在整个页面上运行。您不能设置标志“这些 193 字节”或类似的标志来不被转储。如果您标记缓冲区所在的页面,则同一页面的其余部分也不会被转储。如果这对你来说是个问题,我想你只需要mmap
在你的缓冲区中而不是malloc
ing 它,以便它单独出现在一个页面中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)