我遇到一个问题,Python 进程遇到了段错误,但没有生成核心文件。
以下是一个玩具示例,在以下发行版中不会生成核心文件:
- Ubuntu 12.10
- Fedora 18
但会在以下发行版上生成核心文件:
- 科学Linux 6
- Mac OS X
再现:
$ python -c 'import time; time.sleep(120)'&
$ kill -abrt $! [1]+
Aborted python -c 'import time; time.sleep(120)'
$ ls core* ls: cannot access core*: No such file or directory
但是,如果我向实例发送类似的信号,sleep
我会得到一个核心文件:
$ sleep 120 &
$ kill -abrt $!
[1]+ Aborted (core dumped) sleep 120
$ ls core*
core.8603
在我的 Fedora 18 盒子上,这是我的/proc/sys/kernel/core_pattern
:
$ cat /proc/sys/kernel/core_pattern
core
我已设置以下内容:
$ ulimit -c
unlimited
无论abrtd
服务是否正在运行,这都是可重现的。
我很确定我错过了一些基本配置,但我不知道是什么。谢谢!
编辑:可以通过运行以下命令解决:
$ echo 1 >/proc/sys/fs/suid_dumpable
答案1
总结
$ echo 1 >/proc/sys/fs/suid_dumpable
(或 /etc/sysctl.conf 中的等效项,以在重启后保留更改)
更长
在我的场景中,我曾经setcap
在我的 Python 进程上设置某些功能,例如允许使用原始套接字而无需 root 身份。启用此功能后,您需要 root 身份才能获取核心转储,或者使用上述命令明确告知内核,非 root 用户也可以获取他们自己可以访问的核心转储。
(在这种情况下设置 2 仍然会启用核心转储,但所述核心转储只有 root 用户才能访问)。