无法产生coredump的问题
我写了一个必然会崩溃的程序,名字为 test :
#include "stdlib.h"
#include "unistd.h"
int main()
{
char *pTest = NULL;
memcpy(pTest , "123", 111);
return 0;
}
编译后,直接执行,会在当前目录产生coredump。
然后我又写了一个shell,名字为 shelltest.sh :
#!/bin/bash
ulimit -c unlimited
echo $(date) 'aaaa' >> /root/oooo.log
echo $(ulimit -a) >> /root/oooo.log
sleep 3
./test
并且在/etc/inittab中加入:(shelltest.sh , test 都放在/root下)
asd:2345:respawn:/root/shelltest.sh
执行init q.这时脚本开始循环跑了,并且记了日志,程序也是在循环地崩溃。
在日志中打出来的ulimit -a如下:
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 40960
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024 pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200 r
eal-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 40960
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
跟我在命令行中打出来的一致。似乎没什么不妥的地方。
但是在/root目录下没有产生dump文件。
问题用一句话描述就是:通过shell执行的程序崩溃了,为什么不产生coredump呢?
分析:
我上面的方法,其实也是可以产生coredump的,只是由于目录未设置,产生路径为 /proc/[pid]/cwd(current working directory)对应的目录,如图:

图中的cwd为 “/”,那么coredump需要到”/”下找。
同时要满足产生core的条件:
1. core file size
2. 目录写权限
在下列条件下不产生core文件:
( a )进程是设置-用户-ID,而且当前用户并非程序文件的所有者;
( b
)进程是设置-组-ID,而且当前用户并非该程序文件的组所有者;
( c )用户没有写当前工作目录的许可权;
( d
)文件太大。core文件的许可权(假定该文件在此之前并不存在)通常是用户读/写,组读和其他读。
并且在sshd中输入的ulimit -c unlimited ,在由init启的进程中并不生效,需要设置,可以在shell中设置
无法产生coredump的问题的更多相关文章
- coredump简介与coredump原因总结
from:http://www.cnblogs.com/doctorqbw/archive/2011/12/21/2295962.html 千兵卫博士 coredump简介与coredump原 ...
- coredump
COREDUMP调试的使用 一,什么是coredump 跑程序的时候经常碰到SIGNAL 或者 call trace的问题,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程 ...
- 转:linux coredump调试
1 )如何生成 coredump 文件 ? 登陆 LINUX 服务器,任意位置键入 echo "ulimit -c 1024" >> /etc/profile 退出 L ...
- 快速学习C语言二: 编译自动化, 静态分析, 单元测试,coredump调试,性能剖析
上次的Hello world算是入门了,现在学习一些相关工具的使用 编译自动化 写好程序,首先要编译,就用gcc就好了,基本用法如下 gcc helloworld.c -o helloworld.o ...
- 动态库在线更新导致coredump的问题
最近我们数据中心主机上的第三方管理工具升级,导致数据中心系统coredump,看起来不相关的事情,到底是怎么回事了? 首先,打开core文件看看: core.45259 is truncated: e ...
- coredump调试的使用
一,什么是coredump 跑程序的时候经常碰到SIGNAL 或者 call trace的问题,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满 ...
- 嵌入式系统coredump设计
阴沟翻船,马失前蹄,说明凡事皆有可能.自然,程序设计的再好,也会有crash的时候.开发期还还说,正式交付的系统crash自然更是难以承受的.无论何时,死一次就够了,得有方法查个水落石出. 几年前哥去 ...
- 待整理-coredump
Linux下如何产生coredump(gdb调试用) 任务发生异常,需要记录遗言信息,利用gdb调试,因此需要记录coredump文件.设置查看:在root用户下执行sysctl -a | grep ...
- [转]gdb结合coredump定位崩溃进程
[转]gdb结合coredump定位崩溃进程 http://blog.sina.com.cn/s/blog_54f82cc201013tk4.html Linux环境下经常遇到某个进程挂掉而找不到原因 ...
随机推荐
- 学习练习 java20160507作业
第一题 求水仙花的个数: //求水仙花数 int zongshu = 0; for(int i =100; i<=999;i++) { int bai = i/100; //求百位上面的数字 i ...
- java.lang.Exception: Socket bind failed: [730013] An attempt was made to acc
在CMD命令行中启动运行startup.bat,启运程序总是闪退,查看日志发现如下错误: 26-Jan-2016 18:12:34.463 SEVERE [main] org.apache.coyot ...
- C++ 中的返回值
C++中大致有三种返回值:值拷贝(副本),值引用和指针,返回什么类型的值要根据当时情况而定. 如果返回的是大型对象的副本,那么在每一次的函数调用后返回,都会调用该对象类型的拷贝构造函数构造一个新的副本 ...
- CLRS:Insert sort in in c
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#define ...
- procfs
https://www.kernel.org/doc/Documentation/filesystems/proc.txt /proc/stat cpu 493610 1050 955506 6140 ...
- 百度地图API示例之文本标注
代码 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" cont ...
- .NET中使用log4net
一,加载log4net引用 下载log4net.dll,我们这里使用的是.NET2.0 下载地址:http://files.cnblogs.com/gosky/log4net-1.2.13-bin-n ...
- Unable to write inside TEMP environment path
安装PostgreSQL 9:Unable to write inside TEMP environment path 注册表:regedit HKEY_CLASSES_ROOT\.vbs,设置默认为 ...
- windows下如何修改远程登录端口
windows下如何修改远程登录端口 windows远程桌面默认端口为3389,修改 方法如下:在"开始>运行"中输入"regedit" 点击“确定”,打 ...
- C# 执行JS
需引用命名空间:Microsoft.VsaMicrosoft.JScript using System; using System.Collections.Generic; using System. ...