有没有办法在核心转储生成期间压缩核心文件?
如果系统中的存储空间有限,有没有一种方法可以在需要生成立即压缩的核心转储时保存它?
理想情况下,该方法可以在旧版本的linux上运行,比如2.6.x。
发布于 2011-02-21 15:29:58
Linux内核/proc/sys/kernel/core_pattern文件将执行您想要的操作:http://www.mjmwired.net/kernel/Documentation/sysctl/kernel.txt#141
将文件名设置为类似于|/bin/gzip -1 > /var/crash/core-%t-%p-%u.gz的名称,您的核心文件将以压缩方式保存。
发布于 2019-02-07 06:01:32
对于嵌入式Linux系统,遵循以下脚本更改可以完美地在两个步骤中生成压缩的核心文件
步骤1:创建脚本
touch /bin/gen_compress_core.sh
chmod +x /bin/gen_compress_core.sh
cat > /bin/gen_compress_core.sh #!/bin/sh exec /bin/gzip -f - >"/var/core/core-$1.$2.gz"
ctrl +d
步骤2:更新核心模式文件
cat > /proc/sys/kernel/core_pattern |/nuova/bin/gen_compress_core.sh %e %p ctrl+d
发布于 2019-11-19 19:23:55
正如其他答案所建议的,Linux kernel /proc/sys/kernel/core_pattern文件是一个很好的起点:http://www.mjmwired.net/kernel/Documentation/sysctl/kernel.txt#141
正如文档所说,您可以指定特殊字符"|“,它将告诉内核将文件输出到脚本。按照建议,您可以使用|/bin/gzip -1 > /var/crash/core-%t-%p-%u.gz作为名称,但是它似乎不适合我。我认为这是因为在我的系统内核中,没有将>字符作为输出,而是可能将它作为参数传递给gzip。
为了避免这个问题,就像其他人建议的那样,您可以在我使用/home//crash/core.sh的某个位置创建您的文件,使用以下命令创建它,将其替换为您的用户。或者,您也可以明显地更改整个路径。
echo -e '#!/bin/bash\nexec /bin/gzip -f - >"/home/<username>/crashes/core-$1-$2-$3-$4-$5.gz"' > ~/crashes/core.sh现在这个脚本将接受5个输入参数,并将它们连接在一起并添加到core-path中。必须在~/crashes/core.sh中指定完整路径。还可以指定此脚本的位置。现在让我们告诉内核在生成文件时使用带参数的tour可执行文件:
sudo sysctl -w kernel.core_pattern="|/home/<username>/crashes/core.sh %e %p %h %t"应该再次替换(或整个路径以匹配core.sh脚本的位置和名称)。下一步是崩溃一些程序,让我们创建一个崩溃cpp文件的例子:
int main (){
int * a = nullptr;
int b = *a;
}编译并运行后,有两个选项,我们将看到:
分段故障(核心转储)
或
分段故障
如果我们看到后者,几乎没有可能的原因。
.dump的原因:
sudo sysctl kernel.core_pattern="/tmp/core.dump" -w
我知道这个问题已经有了答案,但我并不清楚为什么它不能“开箱即用”,所以我想总结一下我的发现,希望它能对某些人有所帮助。
https://stackoverflow.com/questions/5063295
复制相似问题