总结

总结

我遇到一个问题,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 用户才能访问)。

相关内容