Linux程序主进程怎样判断某个线程是否异常挂掉?
时间:2011-12-27
来源:互联网
假设程序主进程P中有一个线程T。线程T挂掉的位置及原因不确定,可能会突然异常挂掉,先不追究为什么会挂掉及怎样防止挂掉,现在只考虑主进程怎样判断该线程是否已经异常挂掉了。当然线程正常退出不属于这种情况。
(另外,线程异常挂掉并不一定会导致整个程序退出)
我能想到的方法:
1.在该线程T中再开一个子线程,专门向主进程心跳汇报其状态。超时则认为线程P挂掉
2.在线程函数中线程抛异常。但貌似是,线程函数的异常只能在线程函数中捕捉到,但是线程本身都挂了,线程函数也就捕捉不到该异常了(理解错误的地方请指点)
不知POSIX中的pthread接口里面有没有直接可以做这件事的方法?或者该怎样做?
谢谢!
(另外,线程异常挂掉并不一定会导致整个程序退出)
我能想到的方法:
1.在该线程T中再开一个子线程,专门向主进程心跳汇报其状态。超时则认为线程P挂掉
2.在线程函数中线程抛异常。但貌似是,线程函数的异常只能在线程函数中捕捉到,但是线程本身都挂了,线程函数也就捕捉不到该异常了(理解错误的地方请指点)
不知POSIX中的pthread接口里面有没有直接可以做这件事的方法?或者该怎样做?
谢谢!
作者: Deutschester 发布时间: 2011-12-27
线程挂掉进程不可能不挂.
如果楼主想监控线程, 只能自己合理编码设计, 没有接口那么聪明.
方案:
1,主线程可以轮询检查全局变量, 线程中任何退出点都要设置全局变量, 加锁保护是必要的.
2,线程任何退出点kill本进程某个特定的信号,也可以使用Phtread_kill,目的是让主线程处理这个信号从而获知线程退出.
3,主线程利用select等事件模型,等待线程触发通知.
如果楼主想监控线程, 只能自己合理编码设计, 没有接口那么聪明.
方案:
1,主线程可以轮询检查全局变量, 线程中任何退出点都要设置全局变量, 加锁保护是必要的.
2,线程任何退出点kill本进程某个特定的信号,也可以使用Phtread_kill,目的是让主线程处理这个信号从而获知线程退出.
3,主线程利用select等事件模型,等待线程触发通知.
作者: qq120848369 发布时间: 2011-12-27
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28