【发布时间】:2017-02-07 17:57:54
【问题描述】:
我被告知,如果 abrt-ccpp.service 安装在 Linux PC 上,它会取代/覆盖(我都读过,不确定哪个是真的)文件 /proc/sys/kernel/core_pattern,否则会指定核心文件的位置和文件名模式。
问题:
当我执行systemctl时,为什么abrt-ccpp.service在SUB列下报告exited?我不明白active 和exited 的组合:服务是否“活动”/活动/正在运行?
> systemctl
UNIT LOAD ACTIVE SUB
abrt-ccpp.service loaded active exited ...
问题:
核心文件在哪里生成?我写了这个程序来生成一个SIGSEGV:
#include <iostream>
int main(int argc, char* argv[], char* envz[])
{
int* pInt = NULL;
std::cout << *pInt << std::endl;
return 0;
}
编译执行如下:
> g++ main.cpp
> ./a.out
Segmentation fault (core dumped)
但是我找不到核心文件的生成位置。
我的尝试:
- 在与我的
main.cpp相同的目录中查找。核心文件不存在。 - 查看
/var/tmp/abrt/,因为/etc/abrt/abrt.conf中有以下评论。核心文件不存在。
...
# Specify where you want to store coredumps and all files which are needed for
# reporting. (default:/var/tmp/abrt)
#
# Changing dump location could cause problems with SELinux. See man_abrt_selinux(8).
#
#DumpLocation = /var/tmp/abrt
...
- 因为this link 的评论而查看
/var/spool/abrt/。核心文件不存在。 - 编辑
/etc/abrt/abrt.conf并取消注释并设置DumpLocation = ~/foo这是一个现有目录。随后重新启动 abrt-hook-ccpp (sudo service abrt-ccpp restart) 并重新运行a.out。核心文件未在~/foo/中生成 - 验证
ulimit -c报告unlimited。
我不知道还有什么可以尝试和去哪里看。
如果有帮助,这是我/proc/sys/kernel/core_pattern的内容:
> cat /proc/sys/kernel/core_pattern
|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e
谁能帮助解释 abrt-hook-ccpp 服务的工作原理以及它在哪里生成核心文件?谢谢。
【问题讨论】:
-
您可以简单地修改您的
core_pattern以指向一个预定义的目录。如果我无法弄清楚所有这些聪明的核心捕捉服务是如何工作的,我总是这样做。 -
您的建议奏效了 - 谢谢。您可以将此作为答案发布吗?除了感谢您的回答之外,我在编辑 core_pattern 时遇到了意想不到的问题(最终解决了),并想就此提出后续问题。