当我运行一个会导致分段故障的程序作为root用户时,核心不会被转储..我检查了ulimit -c并且它是无限的...但是如果我作为普通用户运行程序正在转储核心..
suresh@suresh-desktop:~$ ulimit -c
unlimited
suresh@suresh-desktop:~$ ./main
Segmentation fault (core dumped)
suresh@suresh-desktop:~$ sudo ./main
Segmentation fault
suresh@suresh-desktop:~$
root@suresh-desktop:~# ulimit -c unlimited
root@suresh-desktop:~# ./main
Segmentation fault
//main.c
main()
{
*((int *)0xb80000) = 123;
}
root@suresh-desktop:~# ulimit -a -S
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
root@suresh-desktop:~# ulimit -a -H
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
答案 0 :(得分:2)
快速查询。当您以用户suresh
身份运行时,用户root
拥有的核心文件是否仍然存在(以及它的权限是什么)?
如果权限保护它,系统可能不会覆盖现有的核心转储(尽管root
具有root
的超能力。)
尝试在以root
运行之前删除当前核心文件(同时检查目录权限以确保{{1}}可以在那里创建文件)。
对于它的价值,有很多原因可以解释为什么不会倾销核心。其中一些不适用于您的情况,但您应该检查它们的线索(如果我的上述假设不正确)。
答案 1 :(得分:2)
我相信我有同样的问题。通过修改/etc/security/limits.conf文件来添加这一行,我能够在sudo下正确生成核心文件:
root soft core unlimited
似乎运行sudo为用户root创建了一个新shell,核心限制设置为0.这个更改“修复”了这个问题,虽然我确定这会打开一些pote
答案 2 :(得分:1)
setuid可执行文件(sudo就是一个例子)受到一些限制,请尝试:
$ sudo -i
# echo -n 2 > /proc/sys/fs/suid_dumpable
# exit
$ sudo ./main
请务必事先删除任何旧的“核心”文件(不会覆盖现有的核心文件)
涉及潜在的安全风险 - 在网上搜索“suid_dumpable”
答案 3 :(得分:0)
sudo sh -c "ulimit -c unlimited; ./main"
Segmentation fault (core dumped)
我不确定这是否是正确和安全的方式,但它确实有效。 Sudo启动一个新shell,并在程序执行之前在此shell中设置新限制。
答案 4 :(得分:0)
您可能希望有一个look at this来查看未编写核心转储的原因。 paxdiablo提供的答案可能就是标志。您可能想要做的是调整核心转储的写入方式,即核心{PID}而不仅仅是“核心”。无论如何,这是很好的做法。
man 5 core
应该提供我链接的页面中包含的相同信息。