1. 谁能告诉我linux下出core,core究竟是什么
就是一个程序出错时,相关的调试信息,生成的一个文件。
可以对它调试,得到出错原因。
用gdb就可以了。但你的程序必须带gdb信息。
也就是说,在编译的时候要指定-g 参数。
2. linux有多个core文件,怎么区分它们属于哪个进程
只在ubuntu上试过, 以例子说明
强制当前shell sigsegv core mp, 当前shell会退出
$kill -SIGSEGV $$
core file 已经产生
$/var/tmp/cores>ls
core
用gdb列出program name
$gdb
GNU gdb (GDB) 7.5-ubuntu
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show ing"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) core-file ./core
[New LWP 1808]
Core was generated by `/usr/local/bin/ksh'.
Program terminated with signal 11, Segmentation fault.
#0 0x00007f654584d707 in ?? ()
(gdb) quit
用知道的program名字来load core, 并列出stack
$gdb /usr/local/bin/ksh core
GNU gdb (GDB) 7.5-ubuntu
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show ing"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/local/bin/ksh...(no debugging symbols found)...done.
[New LWP 1808]
warning: Can't read pathname for load map: Input/output error.
Core was generated by `/usr/local/bin/ksh'.
Program terminated with signal 11, Segmentation fault.
#0 0x00007f654584d707 in kill () at ../sysdeps/unix/syscall-template.S:82
82 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) bt
#0 0x00007f654584d707 in kill () at ../sysdeps/unix/syscall-template.S:82
#1 0x000000000043244c in job_kill ()
#2 0x00000000004322ed in job_walk ()
#3 0x0000000000474ad9 in b_kill ()
#4 0x000000000045d871 in sh_exec ()
#5 0x0000000000412b16 in exfile ()
#6 0x00000000004135ea in sh_main ()
#7 0x0000000000411f7a in main ()
3. linux的dev下的core可以删除吗
可以,Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试。当程序崩溃时便会产生core文件,其实准确的应该说是core mp 文件
4. linux问题:可以在CoreLinux系统上直接部署php开发环境吗
CoreLinux没用过,可能核心组件少会影响php的运行。服务器的话建议使用centos,redhat等成熟稳定的系统
php本身是跨平台的,各种平台都有编译的版本,核心也是用C/C++编写的。
所以linux系统基本都支持php核心,不过php有很多扩展包,有些甚至是php开发必备的,比如 gd(图像处理),pdo(数据库处理),ssl 等,会需要系统有额外的扩展包。如果corelinux对这些扩展包的需求包支持不好或安装不方便,也会比较麻烦
5. linux core 文件 怎么分析
Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,并且随着吐Core进程的内存空间越大,此过程可能持续很长一段时间(例如当进程占用60G+以上内存时,完整Core文件需要15分钟才能完全写到磁盘上),这期间产生的流量损失,不可估量。
凡事皆有两面性,OS在出Core的同时,虽然会终止掉当前进程,但是也会保留下第一手的现场数据,OS仿佛是一架被按下快门的相机,而照片就是产出的Core文件。里面含有当进程被终止时内存、CPU寄存器等信息,可以供后续开发人员进行调试。
关于Core产生的原因很多,比如过去一些Unix的版本不支持现代Linux上这种GDB直接附着到进程上进行调试的机制,需要先向进程发送终止信号,然后用工具阅读core文件。在Linux上,我们就可以使用kill向一个指定的进程发送信号或者使用gcore命令来使其主动出Core并退出。如果从浅层次的原因上来讲,出Core意味着当前进程存在BUG,需要程序员修复。从深层次的原因上讲,是当前进程触犯了某些OS层级的保护机制,逼迫OS向当前进程发送诸如SIGSEGV(即signal 11)之类的信号, 例如访问空指针或数组越界出Core,实际上是触犯了OS的内存管理,访问了非当前进程的内存空间,OS需要通过出Core来进行警示,这就好像一个人身体内存在病毒,免疫系统就会通过发热来警示,并导致人体发烧是一个道理(有意思的是,并不是每次数组越界都会出Core,这和OS的内存管理中虚拟页面分配大小和边界有关,即使不出Core,也很有可能读到脏数据,引起后续程序行为紊乱,这是一种很难追查的BUG)。
说了这些,似乎感觉Core很强势,让人感觉缺乏控制力,其实不然。控制Core产生的行为和方式,有两个途径:
1.修改/proc/sys/kernel/core_pattern文件,此文件用于控制Core文件产生的文件名,默认情况下,此文件内容只有一行内容:“core”,此文件支持定制,一般使用%配合不同的字符,这里罗列几种:
%p 出Core进程的PID
%u 出Core进程的UID
%s 造成Core的signal号
%t 出Core的时间,从1970-01-0100:00:00开始的秒数
%e 出Core进程对应的可执行文件名
2.Ulimit –C命令,此命令可以显示当前OS对于Core文件大小的限制,如果为0,则表示不允许产生Core文件。如果想进行修改,可以使用:
Ulimit –cn
其中n为数字,表示允许Core文件体积的最大值,单位为Kb,如果想设为无限大,可以执行:
Ulimit -cunlimited
产生了Core文件之后,就是如何查看Core文件,并确定问题所在,进行修复。为此,我们不妨先来看看Core文件的格式,多了解一些Core文件。
6. linux下的core文件是怎么生成的
在linux平台下,设置core mp文件生成的方法: 1 )如何生成 coremp 文件 登陆 LINUX 服务器,任意位置键入 echo "ulimit -c 1024" >> /etc/profile 退出 LINUX 重新登陆 LINUX 键入 ulimit -c 如果显示 1024 那么说明 coremp 已经被开启。...
7. 怎么查看Linux的core开关,以及如何打开和关闭
mp文件可以在程序crash时,方便我们查看程序crash的地方和上下文信息。在window下,要能生成mp文件,需要自己编写相应的代码。不过现在网上可以找到相应的代码,只要把它下载后然后加到自己的工程中去,就可以了!在linux下面就简单的许多。只要打开相应的开关,linux会自动在程序crash时生成相应的core文件。这个文件和window下的mp文件类似。
下面是简单的一些步骤:
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*的文件。然后我们可以
gdb core。* 程序 进行调试。
8. linux上的core文件,麻烦牛人们帮忙解释下是什么原因
关于UNIX/Linux系统下面产生的core文件,根据我使用系统的经验,通常是由于自己在编写程序的过程中,由于自己的疏忽,使自己编写的程序产生了数组越界、或者是程序中的指针指向了一块无效的内存区域,产生的内存溢出错误。这一点在C语言编程过程中尤为明显,即:虽然定义了一个指针变量,但是未对该变量进行初始化、且判断该指针是否为空指针,而在后面的程序中又使用到了该变量,这时候肯定就会产生内存溢出错误。通常产生的提示信息就是:Segmentfault,CoreDumped!此时再一看自己当前工作的目录下面,就会自动产生出一个文件名为core的文件,通常该文件占得空间也是比较大的,至少好几兆字节。
9. linux core 怎么打开
core文件是由应用程序收到系统信号后崩溃产生的,该文件中记录了程序崩溃的原因(例如收到那种信号),调用堆栈和崩溃时的内存及变量值等等的信息。
打开core文件与编译时使用的编译器有关,但绝大多数linux程序是使用gcc编译器编译的,因此可使用对应gdb调试器打开,命令格式如下:
$ gdb 应用程序文件名 core文件名
举例:
$ gdb /usr/bin/gedit ~/core ------ 查看由gedit崩溃产生的core文件
(gdb) bt ------ 或者backtrace, 查看程序运行到当前位置之前所有的堆栈帧情况)
(gdb) quit ------ 退出
如果不知道core文件由哪个文件产生的,可使用file命令显示
$ file core
10. LINUX core怎么设置
放里面,记得在CMOS里面设置成光驱启动哟,然后就进入第一个画面了(由于LINUX安装时无法抓图,所以我用数码相机拍的,图片质量很差,请见谅。)
,版本不是问题,所有的LINUX安装差不多,出现几排字,上面是要你选择图形界面安装,或是文字界面安装,屏幕最下面有个BOOT:的提示符,在这里直接按回车就是图形安装,输入TEXT然后回车就是文字安装,建议你使用图形的界面进行安装,如果直接能够进入图形安装,说明你的显卡配置不成问题了,文字的其实也差不多,不同的是一个用鼠标一个用键盘而已,由于LINUX的版本很多,但是安装方法几乎相同,所以我这里就以REDHAT7。1的安装为例,向大家描述整个安装过程,如果你的是红旗,蓝点,或其他版本,中文的版本,也可以对照进行。
进入图形界面以后,先是语言选择画面,默认是英语,(靠,redhat这真他NN的不象话,就是没有Chinese选)
然后我们看看,是键盘设置,如果你的键盘不是很特别,一般就保持默认设置,直接选NEXT
鼠标设置,选择你的鼠标,PS2接口,串口,两键,三键,如果不确定就用默认的,直接选NEXT
然后我们看到一段欢迎的画面(Welcome to redhat linux),这里无关紧要,直接选NEXT
好,到了安装选择的一步,这里分为两大部分,一是安装,二是升级,安装部分又可选择工作站,服务器,笔记本电脑,和自定义安装,如果是第一次装,请先试试,工作站安装。
然后到了分区的选项,有两个选择,一是用Disk Druid手动分区,二是用fdisk手动分区。我们选上面的
到了这里,我们就可以看到你的硬盘所有的分区,这里我们要记得一点,就是用笔记本抄下每行的第二个数据,如:hda1,hda5,等等,这是你的硬盘上的分区在LINUX下名字,记下以后,通过修改/etc/fstab文件,可以实现在LINUX下面访问WINDWOS的分区。(此方法在后面详细再讲)
我们在LINUX的主分区上面双击鼠标左键,就弹出一个对话框,我们输入一个/以后回车就可以了
这一步我们直接选NEXT,等安装完以后就可以直接用LINUX启动计算机。
网络设置,如果你是拨号的话,就直接选NEXT,如果你是通过局域网或是宽带上网,就需要填写IP和网关。
网络服务选择,我们用暂时默认的
支持语言选择,如果你英语好,就直接选NEXT,如果你想尝试汉化REDHAT,那么最好选上中文,如果找不到,就全选。
时区选择,这里点一下中国地图上的城市就可以了
口令设置,输入你的口令,还可以添加用户,可以添加可以不添加,口令不输入的话为空。
自定义软件,这里把三个空格都打上钩,然后选NEXT,这样我们就安装了2种图形,GNOME,KDE,以及游戏,如果你想装别的软件,就选中最下面的select indivial packages,那么就可以自定义安装,
里面软件很多,我不知道怎么选,所以就全选中了,以后可以慢慢试,不过这里全装的话,一共有2G多哟
然后是显卡设置,在这里找到自己的显卡型号
显示器设置
这里是设置进入XWINDOWS以后的分辨率,以及文字方式登陆和图形方式登陆的选择
然后一直NEXT就可以了,REDHAT7。1的安装也就到此告一段落了,慢慢等进度条加满
创建启动盘,直接选NEXT(记得放软盘哟),不想创建就选中Skip boot disk creation,再选下一步。
然后连选NEXT就结束了
参考资料:
另外,团IDC网上有许多产品团购,便宜有口碑