没有core的程序异常退出追查过程

本文介绍了一个进程无故退出的问题排查过程,最终通过gdb监控发现是由于未处理SIGPIPE信号导致进程异常终止。

        最近朋友项目发生了一件怪事,好好的进程,没有任何痕迹地退出,没有core文件,没有syslog痕迹,也不是进程主动退出,因为逻辑中exit都有日志。

现在记录一下追查过程:

1.先排除core生成条件不足的可能性

1)查看ulimit -c,

2)查看/proc/sys/kernel/core_pattern,

3)查看/etc/sysctl.conf中的

kernel.core_pattern = /var/core/core_%e_%p_%t
kernel.core_uses_pid = 0

这些设置都正常

2.排除程序自身exit

排查代码发现所有exit的地方都有日志,而现在进程退出没有任何exit相关的日志

3.查看syslog

在进程退出时间先后查看syslog没有发现任何异常

4.排除主动调用kill

查看机器的history,并没有发现有人调用过kill

        从上面的结果看,应该是进程主动退出,但是并非是程序中的exit,那么大概率只有一种可能是进程收到了某种信号,然后导致进程退出。其实kill本身也是信号。那么怎么追踪呢?祭出大杀器:gdb,进程退出,最后应该会进入exit接口处理收尾工作。那就gdb在exit函数这里打断点,同时因为不可能直接在终端开着gdb,如果终端断开的话就会终止gdb监控,而本身这个异常退出就是不定时的,所以必须是后台模式启动gdb。

最关键的操作如下:

1.生成一个gdb脚本文件:monitor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值