`
Poechant
  • 浏览: 229497 次
博客专栏
Bebe66e7-3a30-3fc9-aeea-cfa3b474b591
Nginx高性能Web服务...
浏览量:24321
5738817b-23a1-3a32-86de-632d7da73b1e
Cumulus实时媒体服务...
浏览量:22103
社区版块
存档分类
最新评论

Linux环境中以daemon方式运行的程序生成core dump

 
阅读更多

Linux环境中以daemon方式运行的程序生成core dump

  • 作者:柳大·Poechant(钟超)
  • 邮箱:zhongchao.ustc#gmail.com(# -> @)
  • 博客:Blog.CSDN.net/Poechant
  • 日期:June 30th, 2012

1 精要

  1. /etc/profile中添加:
      ulimit -c unlimited > /dev/null 2?&1
    
  2. 修改/proc/sys/kernel/core_pattern文件中的 core dump 文件格式为绝对路径,比如:
      /data/coredump/core-%e-%p-%t
    

    注意/proc/sys/kernel/core_pattern的修改方式是:

      poechant@dev:~$ su
      Password:
      root@dev:/# echo `/data/coredump/core-%e-%p-%t` > /proc/sys/kernel/core_pattern
    

2 详解

一般在 CLI 上启动的程序,如果设置:

ulimit -c unlimited

就可以在程序以外终止时生成 core dump 文件。但是对于 daemon 方式运行的程序,其与 CLI 启动的程序的主要区别是进程的运行环境,其中就包括 cwd(current working directory)。如果以相对路径方式定义 core 文件的格式,比如定义 /proc/sys/kernel/core_pattern 为:

core-%e-%p-%t

则一般来说,daemon 文件的 cwd 就是/,你可以通过/proc/<your_program_pid>/cwd来查看,一般都是连接到/目录。而如果用户对这个目录没有写权限,那么就不会生成 core dump 文件了。

最直接的解决的方法,是修改/proc/sys/kernel/core_pattern为绝对路径:

/data/coredump/core-%e-%p-%t

并且保证这样就基本 OK 了。你可以通过程序来测试一下。两种简单的方式是:

2.1 两个测试小例子

2.1.1 W1S 方式 (While-1-Sleep)

编写一个简单的程序如下:

#include <unistd.h>
int main() {
    while (1) {
        sleep(1);
    }
    return 0;
}

编译运行后使用如下命令让程序生成 core dump 文件:

kill -ABRT <program_pid>

-ABRT也可以用-6,都是表示abort信号。或者利用 GDB:

gdb -p <program_pid>
(gdb) gcore <core_filename>
Saved corefile <core_filename>

也可以生成 core dump 文件。

2.1.2 故意产生一个 segment fault

int main(void) {
    int* p = NULL;
    delete p;
}

编译运行就会被终止生成 core dump 文件。

以上两种方式,core dump 文件应该都是按照你设定的/proc/sys/kernel/core_pattern来生成的。

2.2 core_pattern 格式详解

%%  A single % character
%p  PID of dumped process
%u  real UID of dumped process
%g  real GID of dumped process
%s  number of signal causing dump
%t  time of dump (seconds since 0:00h, 1 Jan 1970)
%h  hostname (same asnodenamereturned by uname(2))
%e  executable filename

2.3 core_uses_pid 作用

/proc/sys/kernel/core_pattern中未定义%p时,/proc/sys/kernel/core_uses_pid文件中定义是否在 core dump 文件名后追加进程ID.PID

  echo 1 > /proc/sys/kernel/core_uses_pid   使得 core文件名后包含   .PID
  echo 0 > /proc/sys/kernel/core_uses_pid   使得core文件名后不包含 .PID

3 Reference

  1. http://blog.csdn.net/iterzebra/article/details/6205848

-

转载请注明来自柳大·Poechant(钟超)的CSDN博客:Blog.CSDN.net/Poechant

-

分享到:
评论

相关推荐

    容器中生成coredump文件

    如何在让docker中运行的进程生成core dump文件

    编写Linux系统下Daemon程序的方法步骤

    在Linux系统中,Daemon程序是不可或缺的一部分,它们作为后台服务长期运行,提供各种系统功能和服务。Daemon不依赖于任何终端,通常在系统启动时启动,系统关闭时终止。这类程序通常用于网络服务(如HTTP服务器)、...

    在Linux下用QT开发Daemon程序.pdf

    当我们从控制终端运行 `myserver` 程序时,它从 Linux 系统中继承了一个终端的连接,这个终端被指定为 `myserver` 程序的控制终端。我们可以使用这个控制终端对 `myserver` 程序进行控制,可以按下 `Ctrl+C` 组合键...

    linux下运行java程序

    在Linux环境下运行Java程序是许多开发人员...总的来说,Linux下的Java程序运行涉及到环境配置、程序编译、权限管理以及进程控制等多个方面。了解和掌握这些技能,将有助于你在Linux环境中高效地管理和运行Java应用。

    linux c++ 守护线程,判断程序是否运行,不存在就启动

    在Linux中,可以使用`system()`函数或者`popen()`来执行命令行操作,例如`pgrep`命令来查找指定的进程。 ```cpp #include #include #include bool isProgramRunning(const std::string& programName) { std::...

    linux daemon monitor

    在Linux操作系统中,守护进程(daemon)是一种在后台运行的程序,它们通常在系统启动时启动,并持续运行直到系统关闭,执行诸如网络服务、计划任务等任务。"linux daemon monitor"是一个重要的工具,用于监控这些...

    Linux以守护进程方式运行的信息服务器

    【守护进程】在Linux系统中,守护进程(Daemon)是一种在后台运行且不与终端关联的进程,通常用于提供持续性的服务。守护进程在启动时会脱离控制终端,避免受到用户登录登出的影响,以便长期稳定地运行。守护进程常...

    linux一键生成蓝牙hciconfig dbus-daemon等工具

    `dbus-daemon`是D-Bus消息总线服务的后台进程,它在Linux中负责进程间通信(IPC)。蓝牙服务在Linux中通常依赖于D-Bus来协调不同组件之间的交互,例如,用户界面与蓝牙服务之间的通信。`dbus-daemon`使得应用程序...

    jstack生成的Thread Dump日志1

    【标题】:深入解析...总之,分析jstack生成的Thread Dump日志,需要结合线程状态、堆栈信息和系统资源状况,以确定线程的行为模式和可能的问题。通过这些信息,开发者可以定位并解决并发问题,优化Java应用的性能。

    daemon进程生成脚本

    在IT行业中,daemon进程通常指的是在后台运行的系统服务,它们独立于终端并持续运行,为其他应用程序提供必要的服务。生成daemon进程的脚本通常使用shell编写,因为shell脚本是一种方便、灵活的自动化工具,尤其适用...

    my_linux_daemon.rar_daemon_linux 守护

    在Linux系统中,守护进程(Daemon)是一种在后台运行且没有控制终端的程序,它们通常在系统启动时启动,负责执行特定的任务,如网络服务、系统管理等。本资源"my_linux_daemon.rar"提供了一个适合Linux初学者的简单...

    隔几秒检测程序是否运行.zip_daemon_linux_进程守护

    在Linux系统中,守护进程(Daemon)是一种在后台运行且没有控制终端的进程,它们通常用于执行特定的服务或任务,例如网络服务、日志管理、计划任务等。本主题聚焦于如何创建一个守护进程,使其每隔几秒钟检查指定...

    arm linux 嵌入式 查proc的软看护程序 daemon.rar

    软看门狗守护进程(daemon)是一种后台运行的程序,其主要任务是定期向软看门狗设备发送保持活动的信号,以防止系统因为长时间无响应而被强制重启。描述中提到,这种守护进程相比脚本编写的服务更高效,因为它占用的...

    daemontool4.11中文完美版daemontool4.11中文完美版

    总的来说,Daemontools 4.11中文完美版是一个针对系统服务管理的强大工具,尤其适合需要在Windows环境中部署和维护服务的用户。其完善的中文支持使得非英语用户也能轻松上手,提升工作效率。在日常运维工作中,合理...

    Linux下使用daemon函数编写后台程序

    在Linux中专门提供了一个函数来完成这个daemon化的过程,这个函数的原型如下  int daemon (int __nochdir, int __noclose);  如果__nochdir的值为0,则将切换工作目录为根目录;如果__noclose为0,则将标准输入...

    《linux/UNIX系统编程手册》书上daemon章节测试实例代码(及简化)

    根据《linux/UNIX系统编程手册》的daemon章节写的一个测试become_daemon()函数程序。代码内容99%以上都是书上给的源码。此处仅注释掉不需要的内容,以及为了简化理解,做了不同平台的适配,(对于源码来说是种倒退,...

    daemon-0.8.tar.gz

    这个文件的命名方式表明它是一个版本号为0.8的守护进程(daemon)相关的程序。在Linux和Unix系统中,守护进程是一种在后台运行、不与终端直接关联的进程,通常用于提供持续的服务,如网络服务、计划任务等。 首先,...

    linux上通过sh方式启动java jar程序并做为守护进程

    在Linux系统中,Java应用程序通常以两种主要方式运行:直接通过命令行或作为守护进程(daemon)。本篇文章将深入探讨如何使用`sh`脚本来启动Java的JAR程序,并将其设置为守护进程,以便在后台持续运行,即使用户注销...

    commons-daemon-native.tar.gz

    3. **Jsvc工具**:这是Apache Commons Daemon中的一个核心组件,它是一个命令行工具,用于在Unix和类Unix系统上以daemon方式运行Java应用程序。Jsvc可以管理Java应用的启动、停止、重启等操作,并能处理信号传递,如...

    使用golang开发的兼容linux、windows、mac的守护程序.zip

    总结来说,利用Go语言开发跨平台守护程序是充分利用其语言优势的一种方式,能够帮助开发者创建出既能在服务器环境中运行,又能在嵌入式设备上高效工作的服务。通过深入学习`go-daemon-master`项目,你将掌握这一核心...

Global site tag (gtag.js) - Google Analytics