+ -
当前位置:首页 → 问答吧 → Linux程序主进程怎样判断某个线程是否异常挂掉?

Linux程序主进程怎样判断某个线程是否异常挂掉?

时间:2011-12-27

来源:互联网

假设程序主进程P中有一个线程T。线程T挂掉的位置及原因不确定,可能会突然异常挂掉,先不追究为什么会挂掉及怎样防止挂掉,现在只考虑主进程怎样判断该线程是否已经异常挂掉了。当然线程正常退出不属于这种情况。

(另外,线程异常挂掉并不一定会导致整个程序退出)

我能想到的方法:
1.在该线程T中再开一个子线程,专门向主进程心跳汇报其状态。超时则认为线程P挂掉
2.在线程函数中线程抛异常。但貌似是,线程函数的异常只能在线程函数中捕捉到,但是线程本身都挂了,线程函数也就捕捉不到该异常了(理解错误的地方请指点)


不知POSIX中的pthread接口里面有没有直接可以做这件事的方法?或者该怎样做?
谢谢!


作者: Deutschester   发布时间: 2011-12-27

线程挂掉进程不可能不挂.

如果楼主想监控线程, 只能自己合理编码设计, 没有接口那么聪明.

方案:

1,主线程可以轮询检查全局变量, 线程中任何退出点都要设置全局变量, 加锁保护是必要的.
2,线程任何退出点kill本进程某个特定的信号,也可以使用Phtread_kill,目的是让主线程处理这个信号从而获知线程退出.
3,主线程利用select等事件模型,等待线程触发通知.

作者: qq120848369   发布时间: 2011-12-27