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

        程序异常分为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继续之后,是正常运行是不等价的,分析问题时,不要受干扰。


`killall -9` 命令是用来向所有进程发送SIGKILL信号的一个命令工具,通常用于立即终止某个进程。在Unix和类Unix系统中,`-9` 参数表示信号的类型为SIGKILL,该信号是不能被进程忽视的,强制要求操作系统终止该进程。 当你使用 `killall -9` 命令失败时,可能有以下几个原因: 1. 命令使用不当:确保你使用正确的命令格式,并且你有足够的权限来终止目标进程。没有足够权限会导致命令执行失败。 2. 进程已经不存在:如果进程在你执行命令之前已经自己结束,那么 `killall -9` 将无法找到目标进程。 3. 进程名称错误:确保你指定的进程名称完全正确,没有拼写错误。 4. 特殊进程或系统进程:某些特殊的系统进程或具有特殊权限的进程可能不会响应SIGKILL信号,或者系统对这些进程有保护机制,阻止它们被强制杀死。 5. 内核安全策略:在某些系统中,内核安全策略可能限制了使用SIGKILL信号杀死进程。 如果遇到 `killall -9` 杀进程失败的情况,你可以尝试以下方法: - 使用 `ps` 命令检查进程是否仍然存在。 - 使用 `top` 或 `htop` 等工具查看进程状态,确认是否真正被终止。 - 检查是否有足够的权限来杀死该进程,如果没有,可能需要使用 `sudo` 来获取必要的权限。 - 如果怀疑是特殊进程或系统进程,尝试使用其他方法或者联系系统管理员。 - 检查系统安全策略,看是否有相关的保护机制阻止了进程的强制终止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值