分享

如何让系统默认产生core文件

 深入敌后_ 2012-08-23

如何让系统默认产生core文件。。。

【注意:产生与不产生core文件还与当前的用户有关,若在ubuntu下按照默认设置,运行程序想要产生core,要先su root一下】

解决方法:
在红帽企业版Linux上默认是不产生core文件。这个限制是在/etc/profile里面设置的:
ulimit -S -c 0 > /dev/null 2>1
有几种方法可以让系统产生core文件。第一个方法是修改/etc/profile里面的ulimit命令,如下:
ulimit -S -c unlimited > /dev/null 2>1
上面的设置允许系统上的所有用户产生没有文件大小限制的core文件。
如果只需要对部分用户或组开放产生core文件的权限,需要编辑/etc/security/limits.conf文件。例如,所有在"devel"组里面的用户可以产生core文件:

#     
@devel  soft core
是core文件的最大块大小。 在/etc/security/limits.conf文件里面有配置参数的详细说明。提示,如果想通过limits.conf里面的设置来控制用户是否 可以产生core文件,需要把/etc/profile里面的ulimits设置注释掉:

# No core files by default
# ulimit -S -c 0 > /dev/null 2>1
如果应用是通过daemon命令来启动的,编辑/etc/init.d/functions,注释掉ulimit的设置或改变这行:
ulimit -S -c 0 >/dev/null 2>1
通过上面的设置,应用程序应该可以产生core文件。如果不能产生core文件,请检查您的应用程序是否拥有正确的uid,在程序执行的时候是否有 使用setuid改变程序的uid。 在红帽企业Linux 3上面, 可以通过下面的命令允许使用setuid的应用程序产生core文件:
echo 1 > /proc/sys/kernel/core_setuid_ok
另外,您也可以在应用程序中添加下面的代码来实现:
prctl(PR_SET_DUMPABLE, 1);
默认情况下,core文件会创建在应用程序的工作目录下。如果您想指定core文件存放的目录,您可以执行以下命令(用您要保存的路径替换/tmp):
echo "/tmp" > /proc/sys/kernel/core_pattern

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多