进程调试笔记

查看进程

查找进程

# 查找进程
ps aux | grep <相关字段>

# 查看进程启动命令
ps <进程号>

查看线程

pidstat -t -p <pid>

查看进程的系统调用

strace <可执行文件>
ltrace <可执行文件>

查看进程的使用资源

cd /proc/<pid>

查看进程树

pstree

死锁调试

发生死锁的原因

  • 互斥访问,同一份资源,只能被一个线程持有;
  • 循环等待,两个锁,被两个线程同时使用,每个线程各持有一个锁;
  • 线程崩溃,锁来不及释放,变得无法释放;

定位死锁线程

使用gdb运行程序:

gdb <可执行程序>
run

如果出现死锁,则父进程进入等待状态,不会归还终端,此时 Ctrl + c 即可中断父进程执行。

查看进程栈信息:

bt

如果发现了lock字样,就差不多是了。

然后切换到栈帧,查看源码,或者直接查看源码,就知道在等待什么资源了。

然后搜索源码,查找谁在持有被等待的资源,这样就可以定位到死锁的两个线程了。

解决死锁问题

  • 规定锁的访问顺序
  • 使用 RAII 类型
  • 使用超时锁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多弗朗强哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值