【工具巧用】用killall -STOP保留多进程运行环境现场

来源:互联网 发布:淘宝卖家如何提前收款 编辑:程序博客网 时间:2024/06/05 01:00

        程序异常分为2类,一类是技术性错误,一类是逻辑错误。前者,程序会崩溃掉,开启core之后,调试core即可。后者不会异常,但可以通过增加assert断言,保留core。单进程无论是单线程还是多线程,都没有问题。但是多进程调试挺麻烦的,依赖很强,恨不得暂停所有进程,分析好了再继续。不用恨,linux直接做就行。


STOP信号就可以暂停掉进程

kill -STOP <pid>                暂停指定进程

killall -STOP <prog>          暂停指定程序所有进程


为了实现这个目的,完整的实现大致是这样:

1、先定义程序异常标志,如果没有,可以修改程序输出一个特征

2、开发一个并列的脚本,实时监控如果发现异常,停止所有进程

if [ 异常满足 ]; then

        killall -STOP 程序名

        或

        收集所有相关进程pid

        kill -STOP pid1 pid2 ...

fi


进程停止之后,就可以gdb -p pid逐个查看运行环境,分析异常原因了


如果需要恢复运行,使用CONT信号即可,用法完全等同STOP

注:如果程序逻辑有时间相关逻辑,比如超时,CONT继续之后,是正常运行是不等价的,分析问题时,不要受干扰。


原创粉丝点击