我目前正在调查我们的软件中有关缺少核心转储的问题
设置: 我们运行一个(c ++)应用程序(myapp),该应用程序最初是由以root用户身份执行的python程序作为子进程启动的。 但是,python程序会降级c ++应用程序的特权,并以单独的用户(myuser)身份运行它 基本上,这是像Run child processes as different user from a long running Python process
中那样完成的问题: 我们监视此过程,最近发生了崩溃,我们可以找出程序异常终止(SIGABRT),但未编写任何核心文件。
尝试解决问题: 我看着Core dump file is not generated,试图找出一些常见的问题
$ ulimit -c
unlimited
$ /proc/sys/kernel/core_pattern
/tmp/core%e%t
(或类似的东西)
到目前为止看起来还不错-然后我检查了另一个stackoverflow线程中提到的setuid问题
$ cat /proc/sys/fs/suid_dumpable
0
似乎表明这可能会阻止核心文件的生成。还有一个解决方案(即调用prctl)。 为了可靠地测试问题并查看调用prctl(PR_SET_DUMPABLE,1,...)的解决方案是否可行,我首先尝试通过手动将SIGABRT发送到应用程序来重现该问题。
现在很奇怪:发送SIGABRT之后,生成了一个核心文件。所以总结一下 -核心文件生成似乎在原则上起作用-发送SIGABRT时。 -corefile生成并不总是有效 这意味着从python脚本进行的setuid调用通常不会阻碍corefile的生成。
有人知道如何从这一点开始吗?