统信uos需配置core_dump至自定义路径:修改/proc/sys/kernel/core_pattern指向/var/crash/并启用core_uses_pid,写入/etc/sysctl.conf持久化;解除ulimit -c限制;对setuid程序需设fs.suid_dumpable=2;最后验证目录可写及崩溃文件生成。

您需要将统信UOS系统生成的核心转储(core dump)文件保存到自定义路径,例如独立分区或大容量磁盘,避免默认路径空间不足导致崩溃现场丢失,同时确保路径具备写入权限与持久化能力。
配置内核core_pattern路径
系统通过/proc/sys/kernel/core_pattern控制core文件的生成位置和命名方式,必须显式设置为可写绝对路径,否则即使程序崩溃也不会落盘。
执行cat /proc/sys/kernel/core_pattern查看当前值。若输出为none或为空,则表示功能被禁用,后续所有操作均无效。
运行sudo sysctl -w kernel.core_pattern=/var/crash/core.%e.%p.%t,将转储文件定向至/var/crash/目录,并按程序名(%e)、进程号(%p)、时间戳(%t)组合命名,便于区分多进程崩溃。
创建目标目录并赋予正确权限:sudo mkdir -p /var/crash && sudo chmod 1777 /var/crash。【1777权限是关键:保证所有用户可写,但仅属主可删,防止非root进程写入失败】
启用PID后缀避免同名覆盖:sudo sysctl -w kernel.core_uses_pid=1。
使core_pattern设置永久生效
上一步的sysctl修改仅在当前运行时有效,重启后会恢复默认。必须将配置写入系统级参数文件才能持久化。
执行echo 'kernel.core_pattern=/var/crash/core.%e.%p.%t' | sudo tee -a /etc/sysctl.conf,追加配置行到sysctl.conf。
再执行echo 'kernel.core_uses_pid=1' | sudo tee -a /etc/sysctl.conf,一并固化PID开关。
运行sudo sysctl -p立即加载新配置,无需重启。
解除ulimit对core文件大小的限制
shell层的ulimit限制优先于内核配置,若其值为0,系统会在写入前直接拦截,导致“Core dumped”提示出现但无实际文件生成。
方法一:临时解除(当前终端会话有效)
执行ulimit -c unlimited。
方法二:永久解除(推荐)
编辑sudo nano /etc/security/limits.conf,在文件末尾添加两行:* soft core unlimited* hard core unlimited
保存后需重新登录用户会话才生效。
验证setuid程序是否支持转储
如果您调试的是sudo启动或带特权的程序(如sudo ./crash_test),默认情况下它不会生成core文件,必须额外开启dump能力。
执行echo 2 | sudo tee /proc/sys/fs/suid_dumpable,临时启用完整dump支持。
为永久生效,向/etc/sysctl.conf追加fs.suid_dumpable = 2,再运行sudo sysctl -p加载。
确认路径实际可用并触发测试
第一步:检查目录是否真正可写
执行sudo -u nobody touch /var/crash/test_write,若报错Permission denied,说明权限或SELinux策略阻止写入,需排查。
第二步:编译并运行崩溃测试程序
创建segv.c:int main() { char *p = NULL; return *p; };
编译:gcc -g -o segv segv.c;
运行:./segv,应输出Segmentation fault (core dumped)。
第三步:查找生成的core文件
执行ls -lt /var/crash/core.*,确认最新文件存在且大小非零。











