强制进程产生coredump,检测死锁以及进程快照

简介: 作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix.net在软件开发的过程中,无论如何努力,bug几乎都是必不可少的。当某些bug发生时,该进程会产生coredump文件。
作者:gfree.wind@gmail.com
博客:linuxfocus.blog.chinaunix.net

在软件开发的过程中,无论如何努力,bug几乎都是必不可少的。当某些bug发生时,该进程会产生coredump文件。通过这个coredump文件,开发人员可以找到bug的原因。但是coredump的产生,大都是因为程序crash了。

而有些bug是不会导致进程crash的,比如死锁——这时,程序已经不正常了,可是却没有coredump产生。如果环境又不允许gdb调试,难道我们就束手无策了吗?针对这种情况,一般情况下,对于这样的进程,可以利用watchdog监控它们,当发现这些进程很长时间没有更新其heartbeat时,可以给这些进程发送可以导致其产生coredump的信号。根据linux的信号默认的处理行为,SIGQUIT,SIGABRT, SIGFPE和SIGSEGV都可以让该进程产生coredump文件。这样我们可以通过coredump来得知死锁是否发生。当然,如果进程添加了这些信号的处理函数,那么就不会产生coredump了。不过,对于SIGABRT, SIGFPE, SIGSEGV,有谁会为它们加上信号处理函数呢。

还有一种情况,进程并没有死锁或者block在某个位置,但是我们需要在某个指定位置进行调试,获取某些变量或者其它信息。但是,有可能是客户环境或者生产环境,不允许我们进行长时间的检测。那么,我们就需要通过coredump来获得进程在运行到该点时的快照。
这个时候,可以利用gdb来产生手工产生coredump。在attach上这个进程时,在指定位置打上断点,当断点触发时,使用gdb的命令gcore,可以立即产生一个coredump。这样,我们就拿到了这个位置的进程快照。


目录
相关文章
|
19天前
|
存储 Linux C语言
【linux进程控制(一)】进程终止--如何干掉一个进程?
【linux进程控制(一)】进程终止--如何干掉一个进程?
|
1月前
|
监控
用c实现进程监控,如果某一进程退出则重启
用c实现进程监控,如果某一进程退出则重启
13 0
|
8月前
|
调度 Windows
7.6 实现进程挂起与恢复
挂起与恢复进程是指暂停或恢复进程的工作状态,以达到一定的控制和管理效果。在 Windows 操作系统中,可以使用系统提供的函数实现进程的挂起和恢复,以达到对进程的控制和调度。需要注意,过度使用进程挂起/恢复操作可能会造成系统性能的降低,导致死锁等问题,因此在使用时应该谨慎而慎重。同时,通过和其他进程之间协同工作,也可以通过更加灵活的方式,实现进程的协调、交互等相应的功能,从而实现更加高效和可靠的进程管理。
74 0
|
6月前
|
调度
进程间同步
进程间同步
22 0
|
9月前
|
Linux
如何在Linux中挂起和恢复进程?
如何在Linux中挂起和恢复进程?
313 1
|
11月前
|
Unix Linux 调度
Linux之创建进程、查看进程、进程的状态以及进程的优先级
Linux之创建进程、查看进程、进程的状态以及进程的优先级
165 0
|
11月前
|
NoSQL 算法 Linux
进程状态,优先级以及进程切换
进程状态,优先级以及进程切换
113 0
|
Linux 数据安全/隐私保护
【Linux线程同步专题】五、进程间同步
【Linux线程同步专题】五、进程间同步
108 0
【Linux线程同步专题】五、进程间同步
使用jstack检测Java应用的死锁(deadlock)状态
使用jstack检测Java应用的死锁(deadlock)状态
136 0
使用jstack检测Java应用的死锁(deadlock)状态
进程crash报错1000
进程crash,在应用程序日志里看到有1000 的报错
进程crash报错1000