文件管理 · 2022年8月22日

linux设置不产生core文件|linux 怎么分析core文件

A. RedHat linux下如何生成core mp文件

在linux平台下,设置core mp文件生成的方法:1 )如何生成 coremp 文件登陆 LINUX 服务器,任意位置键入 echo "ulimit -c 1024" >> /etc/profile退出 LINUX 重新登陆 LINUX键入 ulimit -c如果显示 1024 那么说明 coremp 已经被开启。1024 限制产生的 core 文件的大小不能超过 1024kb,可以使用参数unlimited,取消该限制ulimit -c unlimited2 ) . core 文件的简单介绍在一个程序崩溃时,它一般会在指定目录下生成一个 core 文件。 core 文件仅仅是一个内存映象 ( 同时加上调试信息 ) ,主要是用来调试的。3 ) . 开启或关闭 core 文件的生成用以下命令来阻止系统生成 core 文件 :ulimit -c 0下面的命令可以检查生成 core 文件的选项是否打开 :ulimit -a该命令将显示所有的用户定制,其中选项 -a 代表“ all ”。也可以修改系统文件来调整 core 选项在 /etc/profile 通常会有这样一句话来禁止产生 core 文件,通常这种设置是合理的 :# No core files by defaultulimit -S -c 0 > /dev/null 2>&1但是在开发过程中有时为了调试问题,还是需要在特定的用户环境下打开 core 文件产生的设置。在用户的 ~/.bash_profile 里加上 ulimit -c unlimited 来让特定的用户可以产生 core 文件。如果 ulimit -c 0 则也是禁止产生 core 文件,而 ulimit -c 1024 则限制产生的 core 文件的大小不能超过 1024kb4 ) . 设置 Core Dump 的核心转储文件目录和命名规则/proc/sys/kernel/core_uses_pid 可以控制产生的 core 文件的文件名中是否添加 pid 作为扩展 ,如果添加则文件内容为 1 ,否则为 0proc/sys/kernel/core_pattern 可以设置格式化的 core 文件保存位置或文件名 ,比如原来文件内容是 core-%e可以这样修改 :echo "/corefile/core-%e-%p-%t" > core_pattern将会控制所产生的 core 文件会存放到 /corefile 目录下,产生的文件名为 core- 命令名 -pid- 时间戳以下是参数列表 : %p – insert pid into filename 添加 pid %u – insert current uid into filename 添加当前 uid %g – insert current gid into filename 添加当前 gid %s – insert signal that caused the coremp into the filename 添加导致产生 core 的信号 %t – insert UNIX time that the coremp occurred into filename 添加 core 文件生成时的 unix 时间 %h – insert hostname where the coremp happened into filename 添加主机名 %e – insert coremping executable name into filename 添加命令名6 ) . 一个小方法来测试产生 core 文件直接输入指令 :kill -s SIGSEGV $$发生coremp一般都是在进程收到某个信号的时候,Linux上现在大概有60多个信号,可以使用 kill -l 命令全部列出来。针对特定的信号,应用程序可以写对应的信号处理函数。如果不指定,则采取默认的处理方式, 默认处理是coremp的信号如下:3)SIGQUIT 4)SIGILL 6)SIGABRT 8)SIGFPE 11)SIGSEGV 7)SIGBUS 31)SIGSYS5)SIGTRAP 24)SIGXCPU 25)SIGXFSZ 29)SIGIOT我们看到SIGSEGV在其中,一般数组越界或是访问空指针都会产生这个信号。另外虽然默认是这样的,但是你也可以写自己的信号处理函数改变默认行为。上述内容只是产生coremp的必要条件,而非充分条件。要产生core文件还依赖于程序运行的shell,可以通过ulimit -a命令查看

B. linux 怎么分析core文件

从接触unix开始就一直听到和遇到core mp,特别是刚学着使用C语言在AIX下编写程序的时候, mp更是时不时就会不请自来。记得当时刚写应用的时候,提交程序时最怕的就是在运行过程时遇到core mp,对于银行核心系统,特别是使用静态应用进程,如果一个相对频繁一点的交易导致core mp,那么毫无疑问,除了赶紧定位错误改程序外,重启进程甚至无法争取到多少缓冲的时间来进行代码的更正和测试。而且往往导致core mp的,就是程序中一个小小的未注意到或者未测试到的一个疏忽。虽然常常遇到core mp,不过很长时间内,都是出于知道这个名字,知道它导致的后果,知道一部分导致它出现的原因,其他的就都不甚了了了。说起来,就是自己太懒了,懒得看书……少壮不努力啊。看过一则统计,说60岁以上的老人,超过70%都后悔少壮不努力,不知统计的数据能否反映整个社会的情况。不过总的来说,这句古话还是有些道理的。大家不要学我。哈哈core mp,翻译过来讲,就是核心转储。大致上就是指,如果由于应用错误,如浮点异常、指令异常等,操作系统将会转入内核的异常处理,向对应的进程发送特定的信号(SIGNAL),如果进程中没有对这些信号进行处理,就会转入默认的处理,core mp就是其中的一种。如果进程core mp,系统将会终止该进程,同时系统会产生core文件,以供调试使用。这个core文件其实就是内存的映像,即进程执行的时候内存的内容,也就是所谓的core mp。平常大家说某某进程core mp了,其实主要的意思就是说:某某进程因为错误而被系统自动终止了。AIX上提供了dbx工具可以对core mp进行调试,协助定位引起core mp的代码。最普通的语法是:dbx 应用名 core文件, 然后使用where命令来显示调试信息一般来讲,根据工作中遇到的情况,dbx还是能够比较轻松的根据提示的内容来定位代码的。不过也有一些特殊情况时,dbx显示的调试信息过于模糊或者不直观,这个时候就只能根据经验来逐步定位了。有时定位起来会耗用相当长的时间。遇到这种情况时,使用日志文件,通过在代码中穿插多个写log的语句,也可以协助发现。因为进程core mp时,日志当然也中断了,根据日志在哪个代码行之后或之前中止了,可以有效缩小寻找的范围。甚至,在有些情况下,使用日志定位是唯一简便的方法了。

C. LINUX core怎么设置

我也在看core设置学到的分享给你:在用户的~/.bash_profile里加上ulimit -c unlimited来让特定的用户能产生专core文件而ulimit -c 1024 可以设置属core文件大小。。。此外对于产生的core文件的命名规则,以下的两个proc文件系统下的文件会对他产生影响:1、/proc/sys/kernel/core_uses_pid能控制产生的core文件的文件名中是否添加pid作为扩展2、/proc/sys/kernel/core_pattern能设置格式化的core文件保存位置或文件名,例如:/corefile/core-%e-%p-%t将会控制所产生的core文件会存放到/corefile目录下,产生的文件名为core-命令名-pid-时间戳

D. 为什么没有产生core 文件

一、要保证存放Core mp的目录存在且进程对该目录有写权限。存放Core mp的目录即进程的当前目录,一般就是当初发出命令启动该进程时所在的目录。但如果是通过脚本启动,则脚本可能会修改当前目录,这时进程真正的当前目录就会与当初执行脚本所在目录不同。这时可以查看"/proc/<进程pid>/cwd"符号链接的目标来确定进程真正的当前目录地址。通过系统服务启动的进程也可通过这一方法查看。 二、若程序调用了seteuid()/setegid()改变了进程的有效用户或组,则在默认情况下系统不会为这些进程生成Core mp。很多服务程序都会调用seteuid(),如MySQL,不论你用什么用户运行mysqld_safe启动MySQL,mysqld进行的有效用户始终是msyql用户。如果你当初是以用户A运行了某个程序,但在ps里看到的这个程序的用户却是B的话,那么这些进程就是调用了seteuid了。为了能够让这些进程生成Coremp,需要(echo "1" > /proc/sys/kernel/suid_mpable)。 三、这个一般都知道,就是要设置足够大的Core文件大小限制了。程序崩溃时生成的Core文件大小即为程序运行时占用的内存大小。但程序崩溃时的行为不可按平常时的行为来估计,比如缓冲区溢出等错误可能导致堆栈被破坏,因此经常会出现某个变量的值被修改成乱七八糟的,然后程序用这个大小去申请内存就可能导致程序比平常时多占用很多内存。因此无论程序正常运行时占用的内存多么少,要保证生成Core文件还是将大小限制设为unlimited为好。4四、在/etc/profile中添加:ulimit -c unlimited > /dev/null 2?&1 五、一般在 CLI 上启动的程序,如果设置:ulimit -c unlimited就可以在程序以外终止时生成 core mp 文件。但是对于 daemon 方式运行的程序,其与 CLI 启动的程序的主要区别是进程的运行环境,其中就包括cwd(current working directory)。如果以相对路径方式定义 core 文件的格式,比如定义 /proc/sys/kernel/core_pattern 为:core-%e-%p-%t则一般来说,daemon 文件的 cwd 就是/,你可以通过/proc/<your_program_pid>/cwd来查看,一般都是连接到/目录。而如果用户对这个目录没有写权限,那么就不会生成 core mp 文件了。最直接的解决的方法,是修改/proc/sys/kernel/core_pattern为绝对路径:/data/coremp/core-%e-%p-%t并且保证这样就基本 OK 了。修改/proc/sys/kernel/core_pattern文件中的 core mp 文件格式为绝对路径,比如:/data/coremp/core-%e-%p-%t

E. Redhat Linux下如何生成core mp文件

使用C/C++语言开发程序时,当程序crash的时候产生core mp文件对于调试程序是很有帮助的。在Redhat Linux系统中默认是不生成core mp文件的,这是因为在/etc/profile文件中有这样一行ulimit -S -c 0 /dev/null 2&1第一种方法是修改/etc/profile,把ulimit那一行改为ulimit -S -c unlimited /dev/null 2&1这样设置后系统允许所有用户生成没有大小限制的core mp文件。这样做的优点是不需要重起系统,缺点是无法控制只让某些用户生成core mp文件。* soft core 0如果只想对某些用户或用户组打开core mp,可以加入user soft core 0或@group soft core 0注意如果通过修改/etc/security/limits.conf文件打开core mp,还需要注释掉/etc/profile中的ulmit那一行#ulimit -S -c 0 /dev/null 2&1这样修改的优点是可以针对特定用户或特定组打开core mp文件,缺点是需要重起系统。最后说一下生成core mp文件的位置,默认位置与可执行程序在同一目录下,文件名是core.***,其中***是一个数字。core mp文件名的模式保存在/proc/sys/kernel/core_pattern中,缺省值是core。通过以下命令可以更改core mp文件的位置(如希望生成到/tmp/cores目录下)

F. linux shell ulimit -S -c 0 > /dev/null 2>&1 是什么意思

首先:ulimit-S-c0是ulimit命令,-c选项:设置core文件的最大值.单位:blocks就是段错误时产生的core文件,后面加文件大小。就是设置段错误不产生core文件。>/dev/nullulimit输出的结果保存到/dev/null文件,而这个文件是系统的一个文件,它不保存任何信息。所以如果有不想的输出数据,重定向到这个文件就可以了。这时,标准输出(文件句柄1)是指向这个文件2>&1标准错误(文件名柄2)复制文件句柄为1的地方,也就是/dev/null所以这句的意思,就是设置core文件大小为0,然后输出信息以及错误信息都不输出在显示器上。

G. 请问怎么才能让linux一直能产生coremp文件呢

在Linux上只要打开core mp文件开关,当程序crash时系统生成相应的core文件。下面是简单的一些步骤:1.查看当前是否已经打开了此开关 通过命令:ulimit -c 如果输出为 0 ,则代表没有打开。如果为unlimited则已经打开了,就没必要在做打开。2.通过命令打开 ulimit -c unlimited .然后通过步骤1,可以监测是否打开成功。3.如果你要取消,很简单:ulimit -c 0 就可以了通过上面的命令修改后,一般都只是对当前会话起作用,当你下次重新登录后,还是要重新输入上面的命令,所以很麻烦。我们可以把通过修改 /etc/profile文件 来使系统每次自动打开。步骤如下:1.首先打开/etc/profile文件一般都可以在文件中找到 这句语句:ulimit -S -c 0 > /dev/null 2>&1.ok,根据上面的例子,我们只要把那个0 改为 unlimited 就ok了。然后保存退出。2.通过source /etc/profile 使当期设置生效。3.通过ulimit -c 查看下是否已经打开。其实不光这个命令可以加入到/etc/profile文件中,一些其他我们需要每次登录都生效的都可以加入到此文件中,因为登录时linux都会加载此文件。比如一些环境变量的设置。还有一种方法可以通过修改/etc/security/limits.conf文件来设置,这个方法没有试过,也是网上看到。不过上面两种就可以了! 最后说一下生成core mp文件的位置,默认位置与可执行程序在同一目录下,文件名是core.***,其中***是一个数字。core mp文件名的模式保存在/proc/sys/kernel/core_pattern中,缺省值是core。通过以下命令可以更改core mp文件的位置(如希望生成到/tmp/cores目录下)echo “/tmp/cores/core” > /proc/sys/kernel/core_pattern 设置完以后我们可以做个测试,写个程序,产生一个异常。然后看到当前目录会有个core*的文件。

H. linux下的core文件是怎么生成的

在linux平台下,设置core mp文件来生成的方法自: 1 )如何生成 coremp 文件 登陆 LINUX 服务器,任意位置键入 echo "ulimit -c 1024" >> /etc/profile 退出 LINUX 重新登陆 LINUX 键入 ulimit -c 如果显示 1024 那么说明 coremp 已经被开启。…

I. linux当中的服务器进程莫名消失,没有生成core,一点也没有常规崩溃的状态,不知道是什么情况,没头绪

1:看下系统日志是否有记录,如dmesg,/var/log/message文件2:将你的进程托管给系统的init进程,具体方法查下就知道3:写个监控脚本,监控进程是否存在,记录进程消失的时候的系统状态core有时候不一定会生成,如果是正常信号导致退出肯定不会有core